機器學習筆記 tensorboard的使用

tensorboard是一個功能強大的可視化工具,這裏簡單的介紹一下tensorboard的使用,首先給出中文社區的教程:http://www.tensorfly.cn/tfdoc/how_tos/summaries_and_tensorboard.html

tensorboard適應於tensorflow的計算圖結構,我們將收集數據看成是tensorflow計算圖中的一個節點,所以使用tensorboard與構建網絡計算圖沒有任何差別,首先介紹幾種可使用的節點。

1.數據記錄節點    tf.summary.scalar/image/histogram()

    記錄節點用於記錄需要的數據,其中scalar可用於收集損失函數值、準確率等數據,其餘可以翻閱上面給出的教程瞭解詳細,此節點一般直接跟在需要統計的相應計算之後。

2.記錄彙總節點   merged = tf.summary.merge_all()

    當你在計算圖中插入了許多記錄節點,使用這個節點將各記錄節點的數據收集起來,該節點一般放在整個計算圖的最後面,由於tensorflow的計算特訓,該節點也可以理解成爲所有的記錄節點添加依賴。

3.記錄(日誌)書寫器  summary_writer = tf.summary.FileWriter("log",tf.get_default_graph())

    tensorboard需要將收集到的數據儲存在磁盤上,書寫器將完成這個工作,第一個參數是書寫路徑,第二個是計算圖。

4.運行彙總  summary = sess.run(merged)

    運行彙總節點,獲得收集到的信息。

5.寫入磁盤  summary_writer.add_summary(summary, i)

    將記錄通過書寫器寫入磁盤,第一個參數是寫的記錄,第二個是該記錄的序列。

6.關閉書寫器  summary_writer.close()

   將實例寫入,否則120s寫入一次,該指令一般放在程序最後。

 

   介紹完之後給出一段例程,用tensorboard收集cnn網絡的loss值的變化情況,是在我上一篇博文的cnn網絡代碼的基礎上改動的,有興趣的可以去翻看我的博文。

import tensorflow as tf
import input_data

mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

x = tf.placeholder("float", [None, 784])
y_ = tf.placeholder("float", [None, 10])

x_image = tf.reshape(x, [-1, 28, 28, 1])
# layer_one
filter_one = tf.Variable(tf.truncated_normal([5, 5, 1, 32], stddev=0.1))
filter_one_bias = tf.Variable(tf.zeros([32]) + 0.1)

filter_one_h = tf.nn.relu(tf.nn.conv2d(x_image, filter_one, strides=[1, 1, 1, 1], padding="SAME") + filter_one_bias)
filter_one_out = tf.nn.max_pool(filter_one_h, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding="SAME")
# layer_two

filter_two = tf.Variable(tf.truncated_normal([5, 5, 32, 64], stddev=0.1))
filter_two_bias = tf.Variable(tf.zeros([64]) + 0.1)

filter_two_h = tf.nn.relu(
    tf.nn.conv2d(filter_one_out, filter_two, strides=[1, 1, 1, 1], padding="SAME") + filter_two_bias)
filter_two_out = tf.nn.max_pool(filter_two_h, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding="SAME")

# full_connect

full_connect_w = tf.Variable(tf.truncated_normal([7 * 7 * 64, 1024], stddev=0.1))
full_connect_bias = tf.Variable(tf.zeros([1024]) + 0.1)

full_connect_out = tf.nn.relu(
    tf.matmul(tf.reshape(filter_two_out, [-1, 7 * 7 * 64]), full_connect_w) + full_connect_bias)

# drop_out
keep_drop = tf.placeholder("float")
drop_out = tf.nn.dropout(full_connect_out, keep_drop)

# softmax_loss
w = tf.Variable(tf.truncated_normal([1024, 10], stddev=0.1))
b = tf.Variable(tf.zeros([10]) + 0.1)

loss = tf.nn.softmax(tf.matmul(drop_out, w) + b)

cross_entropy = -tf.reduce_sum(y_ * tf.log(loss))  # 計算交叉熵
tf.summary.scalar("loss_function",cross_entropy)

train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)  # 使用adam優化器來以0.0001的學習率來進行微調
correct_prediction = tf.equal(tf.argmax(loss, 1), tf.argmax(y_, 1))  # 判斷預測標籤和實際標籤是否匹配
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))

sess = tf.Session()  # 啓動創建的模型
merge = tf.summary.merge_all()

sess.run(tf.global_variables_initializer())  # 初始化變量
summary_writer = tf.summary.FileWriter("log",tf.get_default_graph())

for i in range(5000):  # 開始訓練模型,循環訓練5000次
    batch = mnist.train.next_batch(50)  # batch大小設置爲50
    if i % 100 == 0:
        summary, train_accuracy= sess.run([merge, accuracy],feed_dict={x: batch[0], y_: batch[1], keep_drop: 1.0})
        print("step %d, train_accuracy %g" % (i, train_accuracy))
        summary_writer.add_summary(summary, i)
    sess.run(train_step, feed_dict={x: batch[0], y_: batch[1], keep_drop: 0.5})  # 神經元輸出保持不變的概率 keep_prob 爲0.5
summary_writer.close()
print("test accuracy %g" % accuracy.eval(session=sess,
                                         feed_dict={x: mnist.test.images, y_: mnist.test.labels,
                                                    keep_drop: 1.0}))  # 神經元輸出保持不變的概率 keep_prob 爲 1,即不變,一直保持輸出

 

運行完之後,項目目錄下生成了log文件夾,文件夾內有保存好的日誌

下面是在win10下打開tensorboard並讀取該文件

首先在該目錄下打開Powershell,然後輸入tensorboard --logdir=“該文件所在的路徑”

運行後會獲得一個url,在瀏覽器(google瀏覽器)中輸入便可獲得最後結果

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