大数跨境
0
0

Tensorboard机器学习可视化工具

Tensorboard机器学习可视化工具 数据皮皮侠
2019-10-22
2
导读:在20号那天数据皮皮侠介绍了机器学习框架TensorFlow,在实际操作中怎样加强对机器学习的监督呢,今天我们来介绍机器学习可视化工具TensorBoard。



本期导航

标题

介绍

在anaconda中TensorBoard安装启动

具体使用:添加可视化目标

训练

输出可视化结果


01

介绍


在20号那天数据皮皮侠介绍了机器学习框架TensorFlow,在实际操作中怎样加强对机器学习的监督呢,今天我们来介绍机器学习可视化工具TensorBoard。


TensorBoard是一个可视化工具,能够有效地展示Tensorflow在运行过程中的图、参数、各种指标随着时间的变化趋势以及训练中使用到的数据信息。


TensorBoard目的是为了可视化TensorFlow训练神经网络等复杂操作的整个过程,可以更好的理解神经网络的整个过程,调试并优化程序。


可视化类型包括:

训练指标监视,如loss,精确度

图可视化,如训练过程中卷积核和特征图

模型可视化,显示网络结构

参数分布可视化,如卷积核和偏置参数




02

 在anaconda中TensorBoard安装启动



1.安装

在20号的文章里介绍了如何在anaconda中安装TensorFlow,激活它之后使用TensorBoard即可。

2.激活tensorflow

输入

activate tensorflow

记得安装CPU版本tensorflow

输入

pip install --upgrade --ignore-installed tensorflow

3.使用tensorboard可视化

这步骤之前,必须确定你运行了代码生成了tf.event(不懂tf.event可以学习一下20号的tensorflow教程),类似如下文件


4.输入如下命令 

tensorboard --logdir=(此处放置你的event所在路径)

5.最后把显示的链接(笔者的链接是http://DELL-PC:6006)输入到谷歌浏览器中然后出现橙色tensorboard界面,就可视化成功了



03

具体使用:添加可视化目标


TensorFlow日志生成函数与Tensorboard界面栏对应关系:


在定义网络模型时,需要可视化的目标变量可以通过tf.summary添加。


(1)tf.summary.scalar

显示量信息,主要用于记录诸如:准确率、损失和学习率等单个值的变化趋势。

代码示例:

tf.summary.scalar(‘loss’ , loss)tf.summary.scalar('accuracy', accuracy)



(2)tf.summary.histogramr:

显示参数分布直方图,如卷积核参数。

代码示例:

tf.summary.histogram(‘conv1’ , w_conv1)


(3)tf.summary.image:

接收一个tensor,显示图像信息,如特征图和卷积核,默认显示最新的图像信息。

代码示例:

tf.summary.image(‘feature’ , feature_map)tf.summary.image('w_conv1', w_conv1_visual_0)tf.summary.image('x_input' , x_input, 6)



(4)tf.summary.FileWriter:

生成日志, 指定一个目录来告诉程序把文件放到哪里。然后运行的时候使用add_summary()来将某一步的summary数据记录到文件中。

代码示例:

tf.summary.FileWriter('logs/', sess.graph, flush_secs = 10)


(5)tf.summary.merge_all:

整理日志的操作,sess.run一次就不用对上述分别run。代码示例:

sess.run(tf.global_variables_initializer())merged = tf.summary.merge_all()



def inf(self, x):        x_input = tf.reshape(x, [-1, 28, 28, 1])

#可视化输入图像 tf.summary.image('x_input', x_input, 6) with tf.name_scope('1st_layer'): w_conv1 = tf.get_variable('w_conv1', [3, 3, 1, 20]) #可视化卷积核 w_conv1_visual_0 = tf.reshape(w_conv1[:,:,:,0], [1, 3, 3, 1]) w_conv1_visual_1 = tf.reshape(w_conv1[:,:,:,1], [1, 3, 3, 1]) w_conv1_visual_2 = tf.reshape(w_conv1[:,:,:,2], [1, 3, 3, 1])

tf.summary.image('w_conv1', w_conv1_visual_0) tf.summary.image('w_conv1', w_conv1_visual_1) tf.summary.image('w_conv1', w_conv1_visual_2)

#可视化参数分布 tf.summary.histogram('w_conv1', w_conv1) b_conv1 = tf.get_variable('b_conv1', [20]) tf.summary.histogram('b_conv1', b_conv1) h_conv1 = tf.nn.relu(self.conv2d(x_input, w_conv1) + b_conv1) h_pool1 = self.max_pool_2x2(h_conv1)

#可视化特征图 tf.summary.image('h_pool1', h_pool1[:,:,:,:1], 6)



定义网络过程中可以通过tf.name_scope()来划分网络模块,使得可视化结果可以分块展示,效果较为清晰。


代码示例:

 

with tf.name_scope('2nd_layer'):            w_conv2 = tf.get_variable('w_conv2', [3, 3, 20, 40])            b_conv2 = tf.get_variable('b_conv2', [40])            h_conv2 = tf.nn.relu(self.conv2d(h_pool1, w_conv2) + b_conv2)            h_pool2 = self.max_pool_2x2 (h_conv2)            #####tensorboard#####            #可视化特征图            tf.summary.image('h_pool2', h_pool2[:,:,:,:1], 6)

with tf.name_scope('fc_layers'): w_fc1 = tf.get_variable('w_fc1', [7 * 7 * 40, 1024]) b_fc1 = tf.get_variable('b_fc1', [1024]) h_pool2_flat = tf.reshape(h_pool2, [-1, 7 * 7 * 40]) h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, w_fc1) + b_fc1)



04

训练


将所有需要可视化的参数确定之后,需要在sess.run(tf.global_variables_initializer())之后添加:

merged = tf.summary.merge_all()writer = tf.summary.FileWriter(‘logs’, sess.graph)



这部分将所有需要记录的参数整合,并确定记录输出路径logs/,随后在训练部分,在sess.run()中添加:


result = sess.run(merged)writer.add_summary(result, i)



即可将训练过程实时记录到输出路径。



05

输出可视化结果


训练完成以后,在log文件夹下会输出一个日志文件,在控制台输入:


tensorboard --logdir logs/


其中logs/为上面输出的日志文件所在的路径,运行完成以后会返回一个地址,此时复制并在浏览器中打开该地址即可查看tensorboard的可视化结果。


训练过程中的精度变化:



输入层:



第一层的特征图和卷积核:



第二层的特征图:



网络模型:



参数分布:





数据皮皮侠

本期作者:姚力渤

本期编辑校对:李嘉楠


欢迎关注 “ 数据皮皮侠”

更多知识等你发掘


【声明】内容源于网络
0
0
数据皮皮侠
社科数据综合服务中心,立志服务百千万社科学者
内容 2137
粉丝 0
数据皮皮侠 社科数据综合服务中心,立志服务百千万社科学者
总阅读615
粉丝0
内容2.1k