如何实现Tensorboard对CNN神经网络的可视化

如何实现Tensorboard对CNN神经网络的可视化

Ⅰ.参数可视化:

如何实现Tensorboard对CNN神经网络的可视化_第1张图片

Ⅱ.结构可视化:

如何实现Tensorboard对CNN神经网络的可视化_第2张图片

怎么使用Tensorboard实现这么professional又pretty(♥∀♥)的网络可视化操作呢?我们通过下面4个步骤进行对CNN网络t的可视化实现。

文章目录

  • 如何实现Tensorboard对CNN神经网络的可视化
    • 1.命名空间
    • 2.参数概要
    • 3.合并所有的summary
    • 4.保存及更新图
    • 5,需要注意的几个坑

1.命名空间

使用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神经网络的卷积,池化操作层以及全连接层进行空间的命名划分,如下所示:

如何实现Tensorboard对CNN神经网络的可视化_第3张图片

2.参数概要

使用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)

3.合并所有的summary

使用tf.summary.merge_all()合并所有的summary,在使用默认图之前。

#合并所有的summary
merged = tf.summary.merge_all()

with tf.Session() as sess:
    ......

4.保存及更新图

使用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保存更新。

5,需要注意的几个坑

在这里插入图片描述
1.使用cmd命令行,需要先定位至events.out.tfevents的文件路径下。(文件路径不可以有中文字符

2.使用Tensorboard --logdir=文件路径 --port=自定义端口。(使用localhost:6006可能会出现端口占用的问题。

3.打开谷歌浏览器,localhost:端口号即可访问。

4.如果更新Tensorboard的可视化,需要使用新的自定义端口,如:8009,8010等等。(如果使用相同的旧端口,会导致图无法更新显示的问题。

你可能感兴趣的:(python,tensorflow实战,DeepLearning)