如何實現Tensorboard對CNN神經網絡的可視化

如何實現Tensorboard對CNN神經網絡的可視化

Ⅰ.參數可視化:

在這裏插入圖片描述

Ⅱ.結構可視化:

在這裏插入圖片描述

怎麼使用Tensorboard實現這麼professional又pretty(♥∀♥)的網絡可視化操作呢?我們通過下面4個步驟進行對CNN網絡t的可視化實現。

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神經網絡的卷積,池化操作層以及全連接層進行空間的命名劃分,如下所示:

在這裏插入圖片描述

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等等。(如果使用相同的舊端口,會導致圖無法更新顯示的問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章