1. 程式人生 > >tensorflow的視覺化工具Tensorboard的使用——直方圖(histogram,distributions)的使用

tensorflow的視覺化工具Tensorboard的使用——直方圖(histogram,distributions)的使用

今天學習tensorboard中直方圖的使用。首先了解下直方圖的含義:
GB/T3358.1—2009對“直方圖”的定義是:頻數分佈的一種圖形表示,由一些相鄰的長方形組成,每個長方形的底寬等於組距,面積與組的頻數成比例。
也就是說,直方圖是表示頻次分佈情況的一種影象,在tensorboard中,用直方圖顯示張量,主要就是顯示張量中每個值的出現頻次。
一、程式碼新增
首先在層的應用函式中加入資料採集程式碼。

    def get_output(self, inputs, is_training=True):
        with tf.name_scope('%s_cal' % (self.name)) as scope:
            # hidden states
            self.hidden = self.conv(inputs=inputs)
            tf.summary.histogram('histogram', self.conv.weights)
            #self.variable_summaries(self.conv.weights)
            # batch normalization 技術
            if self.batch_normal:
                self.hidden = self.bn(self.hidden, training=is_training)

            # activation
            if self.activation == 'relu':
                self.output = tf.nn.relu(self.hidden)
            elif self.activation == 'tanh':
                self.output = tf.nn.tanh(self.hidden)
            elif self.activation == 'leaky_relu':
                self.output = self.leaky_relu(self.hidden)
            elif self.activation == 'sigmoid':
                self.output = tf.nn.sigmoid(self.hidden)
            elif self.activation == 'none':
                self.output = self.hidden

        return self.output

注意:這裡要採集的是卷積層的權重矩陣的值, tf.summary.histogram(‘histogram’, self.conv.weights),由於這裡使用的是tf.layers.Conv2D這個函式,所以這裡的採集物件是self.conv.weights,(我在前面定義了self.conv = tf.layers.Conv2D(…),所以這裡可以使用self.conv.weights進行採集)可以理解為定義了一個類self.conv,這個類使用self.conv = tf.layers.Conv2D(…),進行初始化,這裡採集類的weights屬性。
這裡注意一定是weights,而不是get_weights(),或者weight_init_value。
之後一切步驟如前,就可以得到圖,進而進行圖的顯示。
二、直方圖的含義
通過前面的設定,訓練之後,就可以得到如下直方圖:
在這裡插入圖片描述


該圖的橫座標表示權重值的分佈範圍,右側的總座標表示訓練測次數,對應的圖形中曲線的顏色由後至前逐步變淺,表示訓練的次數逐步增加。圖形中包含很多個曲線的切片,每個切片表示一次資料採集過程中的情況。從圖中可以看出權重值分佈範圍內每個值出現的頻次,如圖黑色曲線所示:0.0709這個權重值出現了158次。
如果在頁面左側的histogram mode選擇overlay,則會顯示如下圖形:
在這裡插入圖片描述
該圖的下方仍然是權重值的分佈範圍,右側顯示的則是某個權重值出現的頻次,中間的曲線是各次訓練結果的累加顯示。滑鼠點在頁面上可以看到一條黑色的曲線。比如,如圖所示,從這條黑色的曲線上我們可以看到,權重值0.0709在訓練的第40448次出現頻次為155次。

  • 三、distributions顯示內容解析
    distributions圖和histogram圖顯示的資料來源是相同的,只是用不同的方式對相同的內容進行展示。在網上找了很久也沒要找到關於distributions圖的詳解,下面寫寫自己對該圖的理解:
    在這裡插入圖片描述
    該圖的橫座標為訓練的次數,縱座標為權重值的取值範圍,圖中首先從整體上顯示了在訓練過程中權重值的取值範圍,然後用不同的顏色表示取某個區域值的頻次,顏色越深表示出現的頻次越多。從上圖可以看出,該權重值在0附近顏色最深,也就是說在0附近這個區域權重值的取值頻次最高。
  • 四、如何根據直方圖進行調優
    未完待續