sponsored links

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。
之后一切步骤如前,就可以得到图,进而进行图的显示。
二、直方图的含义
通过前面的设置,训练之后,就可以得到如下直方图:
tensorflow的可视化工具Tensorboard的使用——直方图(histogram,distributions)的使用

该图的横坐标表示权重值的分布范围,右侧的总坐标表示训练测次数,对应的图形中曲线的颜色由后至前逐步变浅,表示训练的次数逐步增加。图形中包含很多个曲线的切片,每个切片表示一次数据采集过程中的情况。从图中可以看出权重值分布范围内每个值出现的频次,如图黑色曲线所示:0.0709这个权重值出现了158次。
如果在页面左侧的histogram mode选择overlay,则会显示如下图形:
tensorflow的可视化工具Tensorboard的使用——直方图(histogram,distributions)的使用

该图的下方仍然是权重值的分布范围,右侧显示的则是某个权重值出现的频次,中间的曲线是各次训练结果的累加显示。鼠标点在页面上可以看到一条黑色的曲线。比如,如图所示,从这条黑色的曲线上我们可以看到,权重值0.0709在训练的第40448次出现频次为155次。

  • 三、distributions显示内容解析
    distributions图和histogram图显示的数据源是相同的,只是用不同的方式对相同的内容进行展示。在网上找了很久也没要找到关于distributions图的详解,下面写写自己对该图的理解:
    tensorflow的可视化工具Tensorboard的使用——直方图(histogram,distributions)的使用

    该图的横坐标为训练的次数,纵坐标为权重值的取值范围,图中首先从整体上显示了在训练过程中权重值的取值范围,然后用不同的颜色表示取某个区域值的频次,颜色越深表示出现的频次越多。从上图可以看出,该权重值在0附近颜色最深,也就是说在0附近这个区域权重值的取值频次最高。
  • 四、如何根据直方图进行调优
    未完待续
Tags: