tensorflow 支持结果可视化。可视化的流程是:在训练过程中,将要观察的数据写入文件,最后调用 tensorboard
载入文件,即可在浏览器中查看结果。本节将学习这一功能。
可视化结果告诉我们什么
得到可视化文件,用 tensorboard 载入后,会输出一个地址,在浏览器中访问该地址,即可得到下图:
可以看出,有 4 种类型的可视化结果,分别是 scalars
graphs
distributions
histograms
。上图展示的是 loss
的 scalars,可以很清晰的看出下降过程,这说明在这次应用中,tensorflow 神经网络是正常工作的。如果 loss 并不是越来越小,而是维持一个较大的值,或者甚至变大,那么,神经网络必须得调整。同时,图形化的显示,更能表现出趋势,这次训练,loss 下降的很快,因此可以得出结论,这次构建的神经网络工作的很好,很合适。
怎样让训练结果可视化
tensorflow 提供了 tf.summary.histogram
和 tf.summary.scalar
方法来描述histograms
以及scalars
,以第六节的线性回归为例,只需在需要观察的量之后添加相应的可视化方法即可,如下图:
# 构建网络
w = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
b = tf.Variable(tf.zeros([1]))
y = w*xdata + b
loss = tf.reduce_mean(tf.square(y-ydata))
# 可视化
tf.summary.histogram('/weights', w) # 参数1:名称,参数2:值
tf.summary.histogram('/biases', b)
tf.summary.scalar('loss', loss)
这里只用到histograms
以及scalars
,其他类型的可视化是类似的。
构建完成后,需要将各种显示合并,然后创建写入方法:
merged = tf.summary.merge_all()
writer = tf.summary.FileWriter("logs/", sess.graph) # 写到 logs 文件夹里
最终,在 session 里 run(merged),然后把结果写入文件即可。
rs = sess.run(merged)
writer.add_summary(rs, 写入索引号)
完整代码如下:
#encoding=utf8
import tensorflow as tf
import numpy as np
# 模拟数据
xdata = np.random.rand(100).astype(np.float32)
ydata = xdata*0.5 + 0.8
# 构建网络
w = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
b = tf.Variable(tf.zeros([1]))
y = w*xdata + b
loss = tf.reduce_mean(tf.square(y-ydata))
# 可视化 *********
tf.summary.histogram('/weights', w) # 参数1:名称,参数2:值
tf.summary.histogram('/biases', b)
tf.summary.scalar('loss', loss)
# 训练
train = tf.train.GradientDescentOptimizer(0.3).minimize(loss)
# 初始化
init = tf.global_variables_initializer()
# 执行
sess = tf.Session()
merged = tf.summary.merge_all()
writer = tf.summary.FileWriter("logs/", sess.graph) # 写到 logs 文件夹里
sess.run(init)
for i in range(301):
sess.run(train)
if i%30 == 0:
print i, sess.run(w), sess.run(b)
rs = sess.run(merged)
writer.add_summary(rs, i)
执行脚本,即可在 logs
文件夹里得到可视化文件。
$ ls
logs regression_visiable.py
$ ls logs
events.out.tfevents.1530409906.lcc-vm # 可视化文件
tensorboard 载入可视化文件,浏览器显示
得到可视化文件后,需要用tensorboard
载入,于是执行以下命令:
$ tensorboard --logdir='logs'
tensorboard: command not found
结果提示command not found
,这可能是没有安装交叉编译后的可执行程序,因此需要利用 python 调用。首先需要知道 tensorboard 安装在哪:
于是,可以执行以下命令,载入可视化文件:
$ python /home/lcc/.local/lib/python2.7/site-packages/tensorboard/main.py --logdir='logs'
TensorBoard 1.8.0 at http://lcc-vm:6006 (Press CTRL+C to quit)
发现成功了,访问 http://lcc-vm:6006
,即可看到图形化的训练过程。loss 上面已经介绍,下面看看权重 w
和偏置 b
,根据代码,它们被存储在 histograms
里。
因为权重和偏置不止一个值,所以它不是一条线,而是一个面,表示值都分布在此。横轴表示训练结果,纵轴表示训练次数。可以看出,biases
中途有一次训练结果在 0.88 附近,最终落在 0.8 附近。weights
一开始是个负值,接着就到达接近 0.4 的位置,最终落在 0.5 附近。这与咱们在终端打印出的输出结果是一致的:
$ python regression_visiable.py
0 [-0.04554251] [0.7673728] # weights 起始是负值
30 [0.36016202] [0.87351346] # biases 0.88 附近
60 [0.45276427] [0.8248321]
90 [0.48404422] [0.80838805]
120 [0.49461034] [0.8028334]
150 [0.4981794] [0.8009571]
180 [0.49938497] [0.8003233]
210 [0.49979222] [0.80010927]
240 [0.49992982] [0.8000369]
270 [0.49997628] [0.80001247]
300 [0.49999195] [0.80000424]