Ⅰ.参数可视化:
Ⅱ.结构可视化:
怎么使用Tensorboard实现这么professional又pretty(♥∀♥)的网络可视化操作呢?我们通过下面4个步骤进行对CNN网络t的可视化实现。
使用tf.name_scope(“空间名称”)进行空间的命名,scope即为范围的意思。同时可对x,y等自变量进行名称的设置,通过name="变量名称"实现。
#命名空间
with tf.name_scope("input"):
# 定义两个placeholder
x = tf.placeholder(tf.float32, [None, 784], name="x_input") # 28*28,所有像素点,None代表图片数
y = tf.placeholder(tf.float32, [None, 10], name="y_input") # 10,0~9所有的标签,
以上述代码为例,对CNN神经网络的卷积,池化操作层以及全连接层进行空间的命名划分,如下所示:
使用tf.summary.scalar(“参数名称”,评估参数)对变量的方差,平均值,标准差,直方图等可视化操作。这里我采用自定义函数的方法对这些方法进行统一调用。
#参数概要
def variable_summaries(var):
with tf.name_scope("summaries"):
mean = tf.reduce_mean(var)
tf.summary.scalar("mean", mean)#平均值
with tf.name_scope("stddev"):
stddev = tf.sqrt(tf.reduce_mean(tf.square(var-mean)))
tf.summary.scalar("stddev", stddev)#标准差
tf.summary.scalar("max", tf.reduce_max(var))#最大值
tf.summary.scalar("min", tf.reduce_min(var))#最小值
tf.summary.histogram("histogram", var)#直方图
又或者单个调用tf.summary.scalar(“参数名称”,评估变量)。
# 使用交叉熵代价函数
cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(labels=y, logits=h_fc2),name="cross_entropy")
tf.summary.scalar("loss", cross_entropy)
# 求准确率
accuracy = tf.reduce_mean(tf.cast(correct_predict, tf.float32), name="accuracy")
tf.summary.scalar("loss", accuracy)
使用tf.summary.merge_all()合并所有的summary,在使用默认图之前。
#合并所有的summary
merged = tf.summary.merge_all()
with tf.Session() as sess:
......
使用tf.summary.FileWriter(“路径”, session.graph)保存图。
使用writer.add_summary(summary, train_step)进行更新图。
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
#保存图
writer = tf.summary.FileWriter("log/", sess.graph)
for i in range(21):
for batch in range(n_batch):
batch_x, batch_y = mnist.train.next_batch(batch_size)
summary, _ = sess.run([merged, train_step], feed_dict={x: batch_x, y: batch_y, keep_prob: 0.7})
writer.add_summary(summary, i)
acc = sess.run(accuracy, feed_dict={x: mnist.test.images, y: mnist.test.labels, keep_prob: 1.0})
print("Iter" + str(i) + ",Test_accuracy=" + str(acc))
这里需要的注意的地方是:1.summary, _ = sess.run([merged, train_step], feed_dict={x: batch_x, y: batch_y, keep_prob: 0.7})。2.每个分批次的训练结果存在summary里面,而当一次完整训练结束后,writer.add_summary(summary, i)将summary保存更新。
ob: 0.7})。2.每个分批次的训练结果存在summary里面,而当一次完整训练结束后,writer.add_summary(summary, i)将summary保存更新。
1.使用cmd命令行,需要先定位至events.out.tfevents的文件路径下。(文件路径不可以有中文字符)
2.使用Tensorboard --logdir=文件路径 --port=自定义端口。(使用localhost:6006可能会出现端口占用的问题。)
3.打开谷歌浏览器,localhost:端口号即可访问。
4.如果更新Tensorboard的可视化,需要使用新的自定义端口,如:8009,8010等等。(如果使用相同的旧端口,会导致图无法更新显示的问题。)