TensorFlow中 tensorboard 工具通過讀取在網絡訓練過程中儲存到本地的日志檔案實作資料可視化,日志資料儲存主要用到 tf.summary 中的方法。
summary.py定義在tensorflow/python/summary/summary.py。提供了像tf.summary.scalar、tf.summary.histogram 等方法,用來把graph圖中的相關資訊,如結構圖、學習率、準确率、Loss等資料轉換成 protocol buffer 資料格式,然後再調用 writer.py裡的tf.summary.FileWriter 類,調用其add_summary方法把這些資料寫入到本地硬碟,之後就可以借用 tensorboard 工具可視化這些資料
一、summary.py的函數
1、tf.summary.scalar
用于儲存标量或單個數值,一般用來儲存loss,accuary,學習率等資料,比較常用
tf.summary.scalar(name,tensor,collections=None,family=None)
name:要儲存的資料的命名。在TensorBoard中也用作系列名稱。
tensor:要可視化的資料,張量。在scalar函數中應該是一個标量,如目前的學習率、Loss等
collections:定義儲存的資料歸于哪個集合。預設為[GraphKeys.SUMMARIES]
family:如果定義,在Tensorboard顯示的時候,将作為字首加在變量名前
2、tf.summary.histogram
輸出帶直方圖的彙總的protocol buffer資料,一般用來顯示訓練過程中變量的分布情況
tf.summary.histogram(name,values,collections=None,family=None)
values:要可視化的資料,可以是任意形狀和大小的張量資料
其它三個參數跟上面一樣。
3、tf.summary.image
輸出帶圖像的protocol buffer資料,彙總資料的圖像的的形式如下: ’ tag /image/0’, ’ tag /image/1’…,如:input/image/0等。
tf.summary.image(name,tensor,max_outputs=3,
collections=None,
family=None)
tensor:形狀為[批量數、高度、寬度、通道數]的4階張量,類型為 uint8 或 float32 ,其中通道數為1、3或4。
max_outputs:生成圖像的批處理元素的最大數目。
其它同上。
4、tf.summary.audio
輸出帶音頻的protocol buffer資料。音頻是由張量建構的,張量必須是三維的[批量大小,幀,通道數]或二維的[批量大小,幀]。
tf.summary.audio(name,tensor,sample_rate,
max_outputs=3,
collections=None,
family=None)
tensor:形狀為[批量大小,幀,通道數]的三階張量或形狀[批量大小,幀]的二階張量。類型為float32
sample_rate:以赫茲表示的信号采樣率的标量float32張量。
max_outputs:為其生成音頻的批處理元素的最大數目
其它同上
5、tf.summary.merge
對指定的多個值進行聯合輸出。運作op時,如果要合并的摘要中的多個值使用同一個标記,則會報告InvalidArgument錯誤。
tf.summary.merge(inputs,collections=None,name=None)
inputs:包含protocol buffers資料的字元串張量清單
collections:定義儲存的資料歸于哪個集合。預設為[]
name:操作的名稱
6、tf.summary.merge_all
對所有值進行聯合輸出。可以将所有summary全部儲存到磁盤,以便tensorboard顯示。如果沒有特殊要求,一般用這一句就可一顯示訓練時的各種資訊了
tf.summary.merge_all(key=tf.GraphKeys.SUMMARIES,scope=None,name=None)
key:定義儲存的資料歸于哪個集合。預設為[GraphKeys.SUMMARIES]
scope:用于篩選摘要操作的可選範圍,使用re.match
name:操作的名稱
二、text_summary.py的函數
8、tf.summary.text
用于将文本類型的張量資料轉換成張量寫入summary中
tf.summary.text(name,tensor,collections=None)
name:要生成的資料的命名。在TensorBoard中也用作系列名稱。
tensor:要轉換的字元串類型張量
collections:定義儲存的資料歸于哪個集合。預設為[GraphKeys.SUMMARIES]
如:
text = """/a/b/c\\_d/f\\_g\\_h\\_2019"""
summary_op0 = tf.summary.text('text', tf.convert_to_tensor(text))
-->b'\n/\n\x04textB\x1d\x08\x07\x12\x00B\x17/a/b/c\\_d/f\\_g\\_h\\_2019J\x08\n\x06\n\x04text'
三、FileWriter類
9、tf.summary.FileWriter
是一個類,定義在tensorflow/python/summary/writer/writer.py。其作用是将總結的協定緩沖區寫入事件檔案中。這個類提供了一套完整的機制在給定的目錄中建立一個事件檔案,然後在其中添加summary和事件。而且這個類是異步地(asynchronously)來更新檔案内容,意味着你能夠調用直接從訓練循環向檔案添加資料的方法,而不會減慢訓練。其初始化函數如下:
def __init__(self,
logdir,
graph=None,
max_queue=10,
flush_secs=120,
graph_def=None,
filename_suffix=None,
session=None):
logdir:事件檔案要儲存的目錄
graph: graph(圖)對象,例如 sess.graph
max_queue:隊列中事件和概要的最大數量,預設為10;
flush_secs:事件和概要儲存到本地磁盤的間隔,預設120S;
graph_def: 舊版本的graph,已棄用;
filename_suffix:可選參數,事件檔案的字尾。
其有一個add_summary()方法用于将訓練過程資料儲存在FileWriter對象指定的logdir檔案中。
add_summary(self, summary, global_step=None)
close() 方法是把事件檔案寫到硬碟,并且關閉檔案,一般是在不再需要writer的時候調用這個函數。
用法示例:
tf.summary.scalar('accuracy',acc) #生成準确率标量圖
merge_summary = tf.summary.merge_all()
train_writer = tf.summary.FileWriter(dir,sess.graph)#定義一個寫入summary的目标檔案的對象,dir為寫入檔案位址
......(交叉熵、優化器等定義)
for step in xrange(training_step): #訓練循環
train_summary = sess.run(merge_summary,feed_dict = {...})#調用sess.run運作圖,生成一步的訓練過程資料
train_writer.add_summary(train_summary,step)#調用train_writer的add_summary方法将訓練過程以及訓練步數儲存
train_writer.close()
參考:https://www.cnblogs.com/lyc-seu/p/8647792.html