网络结构可视化
我们首先看一个最简单的只有网络而没有训练过程的demo(矩阵相乘):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#encoding=utf-8 import tensorflow as tf """ 如果使用tf.name_scope指定了命名范围,该命名范围会在可视化图形中合并显示 """ with tf.name_scope('graph') as scope: matrix1 = tf.constant([[3., 3.]], name='m1') # 1×2的矩阵 matrix2 = tf.constant([[2.], [2.]], name='m2') # 2×1的矩阵 product = tf.matmul(matrix1, matrix2, name='matmul') # 矩阵相乘 with tf.Session() as sess: writer = tf.summary.FileWriter("logs/", sess.graph) """ 或者写成这样的形式: writer = tf.summary.FileWriter('logs/') writer.add_graph(sess.graph) """ sess.run(tf.global_variables_initializer()) |
运行项目,会在项目文件夹里生成一个logs目录,并在logs目录下保存生成的数据。
切换到项目路径下,在命令行运行
1 2 |
tensorboard --logdir=logs |
然后打开浏览器,访问localhost:6006(与执行完tensorboard命令后回显的url一致),就可以看到tensorboard生成的可视化图形了。
训练过程可视化
上面的操作只能将网络结构可视化,下面介绍一个更复杂一点的例子:我们训练一个线性回归模型 y=kx+b 的参数k和b,并将训练过程可视化。
tensorboard支持以下的几种统计图:
- tf.summary.scalar(name, tensor)
折线图,其中tensor参数只能是单个的数- tf.summary.histogram(name, values)
直方图,其中values可以是多个数- tf.summary.image(name, tensor)
图像,其中tensor是一副图片
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# encoding=utf-8 import tensorflow as tf import numpy as np x = np.random.rand(100).astype(np.float32) # 随机的x y_ = 3 * x + 1 # 真实标签 print(x) k = tf.Variable(np.random.rand()) # 用随机数作为k的初始值 tf.summary.scalar('k', k) """ 或者使用 tf.summary.histogram('k', k) """ b = tf.Variable(0.) # b的初始值为0.0(float32类型) tf.summary.scalar('b', b) """ 或者使用 tf.summary.histogram('b', b) """ y = k * x + b # 网络的输出值 loss = tf.reduce_mean(tf.square(y - y_)) tf.summary.scalar('MSE_loss', loss) optimizer = tf.train.GradientDescentOptimizer(0.1).minimize(loss) # 为了看清学习的过程,将学习率设小一点(0.1) with tf.Session() as sess: print(tf.shape(k)) # 合并所有的summary merged = tf.summary.merge_all() # 将summary写入logs文件夹 writer = tf.summary.FileWriter("logs/", sess.graph) sess.run(tf.global_variables_initializer()) # 训练300个steps for step in range(300): sess.run(optimizer) summary = sess.run(merged) writer.add_summary(summary, step) |
同样地,在命令行运行
1 2 |
tensorboard --logdir=logs |
显示的统计图结果为:
从图中可以看出,随着样本不断的训练,k逐渐接近3,而b逐渐接近1,最终能够较好地拟合线性函数y=3x+1。