secs 调试工具_Tensorboard机器学习可视化工具

fc3b4deae5531dc4a77a05e8be63082f.png

本期导航

标题

介绍

在anaconda中TensorBoard安装启动

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

训练

输出可视化结果

3f266bbf902a36c9bf55eeeaf0da2cc2.png

01

介绍

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

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

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

可视化类型包括:

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

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

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

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

43d74f364cc349013a35338227f616eb.png

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教程),类似如下文件

7515805f0be39617547998def4df5903.png

4.输入如下命令 

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

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

f916e5e3d7cbe4efb19596f5b6352352.png

03

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

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

f4a77edd33a8d62ce4f407ee6fae4bd8.png

在定义网络模型时,需要可视化的目标变量可以通过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的可视化结果。

训练过程中的精度变化:

95a5b92d17540a421e42fb5a23385fba.png

输入层:

e1787423473a013843f48b136bceb4f0.png

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

874c7403601bbbb817c2ae397478a279.png

第二层的特征图:

74ff9e68607244d4b3a422a020f61845.png

网络模型:

cb1c147b39720a6a16a5660edbc3a4c9.png

参数分布:

8fbe8a86169436d34dd9d0bfe2ee04b6.png 2588e36f45a88393d1ed077edebc321d.png 775efe7e7fb4732d1f2483955b43b0fc.png

数据皮皮侠

595f43e918d9190fd3c238f5fac51325.png

本期作者:姚力渤

本期编辑校对:李嘉楠

欢迎关注 “ 数据皮皮侠”

更多知识等你发掘

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值