tensorflow入门学习,tensorboard
发表于: 2018-07-01 10:44:50 | 已被阅读: 23 | 分类于: tensorflow
tensorflow 支持结果可视化。可视化的流程是:在训练过程中,将要观察的数据写入文件,最后调用 tensorboard
载入文件,即可在浏览器中查看结果。本节将学习这一功能。
可视化结果告诉我们什么
得到可视化文件,用 tensorboard 载入后,会输出一个地址,在浏览器中访问该地址,即可得到下图:
可以看出,有 4 种类型的可视化结果,分别是
怎样让训练结果可视化
tensorflow 提供了
# 构建网络
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)
执行脚本,即可在
$ ls
logs regression_visiable.py
$ ls logs
events.out.tfevents.1530409906.lcc-vm # 可视化文件
tensorboard 载入可视化文件,浏览器显示
得到可视化文件后,需要用
$ tensorboard --logdir='logs'
tensorboard: command not found
结果提示
于是,可以执行以下命令,载入可视化文件:
$ 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)
发现成功了,访问
因为权重和偏置不止一个值,所以它不是一条线,而是一个面,表示值都分布在此。横轴表示训练结果,纵轴表示训练次数。可以看出,
$ 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]