基於tensorflow權重文件的解讀

1.解讀tensorflow權重文件,透過 tf.train.NewCheckpointReader函數。

2.reader.get_variable_to_shape_map()可以得到權重文件裡面的tensor名稱。

3.reader.get_tensor(key) 可以得到對應tensor的權重值。

import tensorflow as tf
cpktFileName = r'.\models\resnet_v2_152.ckpt'
reader = tf.train.NewCheckpointReader(cpktFileName)
for key in sorted(reader.get_variable_to_shape_map()):
   
    if key.endswith('weights') or key.endswith('biases'):
        keySplits = key.split(r'/')
        print(key)
        print(reader.get_tensor(key))
        

resnet_v2_152權重 tensor name解讀

第一,每個tensor name都以resnet_v2_152開頭

第二,tensor name第二段為block,共有四個block。與網絡架構有關。

第三,第三字段為unit,每個block裡面unit數量不同。與網絡架構有關。

第四,除瞭組後的平坦層,第四字段都為bottleneck_v2

第五,第五字段為‘conv1’,‘conv2’,‘conv3’,‘shortcut’

第六,第六字段為‘weights’ or ‘biases’

在這裡插入圖片描述

補充:tensorflow模型的調用,權重查看

以vc版本的tensorpack說明

模型調用

每次運行,會有checkpoint、graph、model生成

1、其中,若文件夾已經有checkpoint,且寫有自動掉用上次模型,可以在上次的基礎上繼續訓練,否則重新生成,且不能調用之前的模型,即使已經存在

2、每次運行會重新生成graph,即使上次的已經存在,因此調用上次模型與文件夾中是否有graph無關

權重變量查看

import numpy as np
import tensorflow as tf
import sys
model = sys.argv[1]
tensor = sys.argv[2]
reader = tf.train.NewCheckpointReader(model)
all_variables = reader.get_variable_to_shape_map()
#reader = pywrap_tensorflow.NewCheckpointReader(ckpt_path)
#param_dict = reader.get_variable_to_shape_map()
for key, val in all_variables.items():
    try:
        print key, val
        #key是網絡參數名,val是維度
    except:
        pass
w0 = reader.get_tensor(tensor)
np.save('con1d_w.npy',w0)
print(type(w0))
print(w0.shape)
print(w0[0])

文件內容

chekpoint—記錄瞭保存的最新的checkpoint文件以及其它checkpoint文件列表。在inference時,可以通過修改這個文件,指定使用哪個model

MyModel.meta文件保存的是圖結構,meta文件是pb(protocol buffer)格式文件,包含變量、op、集合等。

ckpt文件是二進制文件,保存瞭所有的weights、biases、gradients等變量。在tensorflow 0.11之前,保存在.ckpt文件中。0.11後,通過兩個文件保存,如:

MyModel.data-00000-of-00001
MyModel.index

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: