寫在前面:
上周微調一個文本檢測模型seglink,將特征提取層進行凍結,只訓練分類回歸層,然而查看tensorboard發現里面有histogram顯示模型各個參數分布,看了目前這個訓練模型參數分布壓根就看不懂,很想知道我的預訓練模型的參數分布是怎么個情況,訓練了一天了,模型的參數分布較預訓練的模型參數有啥變化沒有,怎么辦呢?
利用tf.summary將模型參數分布在tensorboard可視化:
導入需要的庫 設置模型文件夾路徑
1 import TensorFlow as tf 2 from tensorflow.python import pywrap_tensorflow
model_dir="___"
定義可視化方法:
1、獲取ckpt路徑,這里的路徑是checkpoint文件中的路徑(ckpt文件夾中包括:checkpoint文件,index,meta,data四個文件)
code:
ckpt=tf.train.get_checkpoint_state(model_dir)
ckpt_path=ckpt.model_checkpoint_path
2、讀取checkpoint 文件中模型的變量名和變量值
這里是使用get_variable_to_shape_map()獲取了一個[key:name of variable value:the shape of variable]的list
code:
reader=pywrap_tensorflow.NewCheckpointReader(ckpt_path)
param_dict=reader.get_variable_to_shape_map()
3、開一個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日志文件夾的路徑
然后根據執行結果上的網址,打開瀏覽器即可觀察模型參數分部情況:
附一張參數分布圖,具體怎么研究比較這個直方圖,接下去再研究吧~
小白一枚,進步很慢,希望各路大神道友指教和批評~~~~