寫在前面:python
上週微調一個文本檢測模型seglink,將特徵提取層進行凍結,只訓練分類迴歸層,然而查看tensorboard發現裏面有histogram顯示模型各個參數分佈,看了目前這個訓練模型參數分佈壓根就看不懂,很想知道個人預訓練模型的參數分佈是怎麼個狀況,訓練了一天了,模型的參數分佈較預訓練的模型參數有啥變化沒有,怎麼辦呢?web
利用tf.summary將模型參數分佈在tensorboard可視化:瀏覽器
導入須要的庫 設置模型文件夾路徑session
1 import TensorFlow as tf 2 from tensorflow.python import pywrap_tensorflow
model_dir="___"
定義可視化方法:spa
一、獲取ckpt路徑,這裏的路徑是checkpoint文件中的路徑(ckpt文件夾中包括:checkpoint文件,index,meta,data四個文件).net
code:日誌
ckpt=tf.train.get_checkpoint_state(model_dir)
ckpt_path=ckpt.model_checkpoint_path
二、讀取checkpoint 文件中模型的變量名和變量值code
這裏是使用get_variable_to_shape_map()獲取了一個[key:name of variable value:the shape of variable]的listblog
code:事件
reader=pywrap_tensorflow.NewCheckpointReader(ckpt_path)
param_dict=reader.get_variable_to_shape_map()
三、開一個session,
code:
with tf.Session() as sess: validate_writer=tf.summary.FileWriter('./run') for key in param_dict: if(key.startwith('vgg')): vgg_summary=tf.summary.histogram(key,reader.get_tensor(key)) merge_summary=tf.summary.merge([vgg_summary])#這裏能夠添加其餘須要merge的summary項,若是隻有一個summary也能夠不用merge, test_summary=sess.run(merge_summary) validate_writer.add_summary(test_summary)
tf.summary.FileWriter(event_dir_path)#event_dir_path爲事件日誌文件夾,運行程序以後會在該指定的文件夾中生產events文件。運行TensorFlow計算後,會將各種數據彙總記錄進該日誌文件,tensorboard會讀取這些數據進行解析並生成數據可視化的web頁面。
key.startwith('vgg')在param_dict字典中提取以vgg開頭的key,並獲取相關tensor以histogram的形式彙總
merge_summary=tf.summary.merge([.....])合併指定數據彙總
test_summary=sess.run(merge_summary)執行一步run,獲得merge_summary,並將該summary
validate_writer.add_summary(test_summary)#將當前一步run獲得的summary加入以前設置的validate_writer
附上summary示意圖幫助理解,圖片引用自CSDN網址:https://blog.csdn.net/hongxue8888/article/details/78610305
最後還要關閉writer
validate_writer.close()
運行代碼以後,執行以下指令:
tensorboard --logdir="./run"#就是以前設置的events日誌文件夾的路徑
而後根據執行結果上的網址,打開瀏覽器便可觀察模型參數分部狀況:
附一張參數分佈圖,具體怎麼研究比較這個直方圖,接下去再研究吧~
小白一枚,進步很慢,但願各路大神道友指教和批評~~~~