scalar是用來顯示accuracy,cross entropy,dropout等標量變化趨勢的函數。 通過scalar可以看到這些量隨着訓練加深的一個逐步變化的過程,進而可以看出我們模型的優劣。
注意:
1)scalar只能用於單個標量的顯示,不能顯示張量;
2)scalar可以顯示多次訓練的結果
變量
變量則可使用Tensorflow.histogram_summary()方法:
tf.histogram_summary(layer_name+"/weights",Weights) #name命名,Weights賦值
標量
1.在tensorflow構建圖的過程中放入記錄變量
在使用tensorflow構建圖的過程中,在需要記錄變量值的地方放入summary operations。
使用tf.summary.scalar記錄標量
使用tf.summary.histogram記錄數據的直方圖
使用tf.summary.distribution記錄數據的分佈圖
使用tf.summary.image記錄圖像數據
————————————————
在要顯示的標量下添加代碼:
tf.summary.scalar('loss', loss) # 記錄優化器的變化
注意:使用相同的配置多次訓練,然後相同的數據在同一個圖上顯示的結果,進入該log所在的文件夾,刪除歷史記錄,僅僅保留最新的結果,就會出現一個比較乾淨的圖。
2.合併summary operation
在變量tensorflow變量初始化之前合併採集點變量,並且將它們寫到之前定義的log_dir路徑。
summaries合併
merged = tf.summary.merge_all()
# 寫到指定的磁盤路徑中
train_writer = tf.summary.FileWriter(log_dir + '/train', Session.graph) ##該句也可寫在變量初始化後,或者訓練流程後面
tf.global_variables_initializer().run()
注意這裏的train_writer變量,這裏是定義一個信息的存儲位置,後面在訓練過程中採集到的數據都要通過這個變量寫入文件。
3.在網絡訓練的過程中採集數據
下面就是在網絡的訓練過程中將該記錄的數據記錄下來
#訓練1k次
for i in range(1000):
sess.run(train_step,feed_dict={xs:x_data,ys:y_data})
if i%50==0:
result = sess.run(merged,feed_dict={xs:x_data,ys:y_data}) #merged也是需要run的
train_writer.add_summary(result,i) #result是summary類型的,需要放入writer中,i步數(x軸)
或者
for i in range(1000):
batch = mnist.train.next_batch(50)
summary,_ = session.run([merged,train], feed_dict = {x:batch[0], y:batch[1], keep_prob:0.5})
train_writer.add_summary(summary,i)
if i % 100 == 0:
print("step %4d: " % i)
print(session.run(accuracy, feed_dict = {x:batch[0], y:batch[1], keep_prob:1}))
print(session.run(accuracy, feed_dict = {x:mnist.test.images, y:mnist.test.labels, keep_prob:1}))
train_writer.close()
4.打開tensorboard
進入tensorflow的虛擬環境
tensorboard --logdir="自己存的地址"
複製出現的網址,在網頁中打開即可
顯示多次訓練的結果
要顯示多次訓練的結果,就要在每次訓練的過程中給FileWriter設置不同的目錄。比如第一次訓練設置如下:
train_writer = tf.summary.FileWriter(log_dir + '/train', self.sess.graph)
那麼第二次訓練就可以設置爲:
train_writer = tf.summary.FileWriter(log_dir + '/train_1', self.sess.graph)
這樣當按照常規步驟打開tensorboard時,在面板的左側就會顯示不同的訓練結果文件,如果要打開,則勾選相應的文件即可。
當勾選多個時,在圖中就會以不同的顏色顯示不同的圖像。應該可以實現不同模型但是訓練結果在一個圖中的情況,只需存儲路徑和train_writer相同)