tf.Graph().get_operations()

在導入訓練好的模型(如我導入Inception模型tensorflow_inception的圖結構和網絡權重pb文件),一個.pb格式文件,包含了模型的網絡結構和訓練得到的參數數據;導入該模型如果想找到特定的operation那麼該怎麼辦呢?

tensorflow+inceptionv3圖像分類網絡結構的解析與代碼實現

在學習deepdream時(官方代碼)時有如下這段代碼:

# 導入要用到的基本模塊。爲了在python2、python3 中可以使用E侶兼容的 print 函數
from __future__ import print_function
import numpy as np
import tensorflow as tf

# 創建圖和Session
graph = tf.Graph()
sess = tf.InteractiveSession(graph=graph)

# tensorflow_inception_graph.pb文件中,既存儲了inception的網絡結構也存儲了對應的數據
# 使用下面的語句將之導入
model_fn = 'tensorflow_inception_graph.pb'
with tf.gfile.FastGFile(model_fn, 'rb') as f:
    graph_def = tf.GraphDef()
    graph_def.ParseFromString(f.read())
# 定義t_input爲我們輸入的圖像
t_input = tf.placeholder(np.float32, name='input')
imagenet_mean = 117.0
# 輸入圖像需要經過處理才能送入網絡中
# expand_dims是加一維,從[height, width, channel]變成[1, height, width, channel]
# t_input - imagenet_mean是減去一個均值
t_preprocessed = tf.expand_dims(t_input - imagenet_mean, 0)
# 導入模型
tf.import_graph_def(graph_def, {'input': t_preprocessed})

# 找到所有卷積層
layers = [op.name for op in graph.get_operations() if op.type == 'Conv2D' and 'import/' in op.name]

其中最後一行有個layers的list,裏面存放的是graph中操作類型Conv2D操作名中帶有“import/”的操作名。而.pb文件沒法打開,即使打開了也是2進制存的格式,無法解釋。那麼這個訓練得到的.pb文件中都有哪些operation呢?我將Inception的所有op名都打印下來使用的代碼和結果如下:

layers = [op.name for op in graph.get_operations()]
>>layers
['input',
 'sub/y',
 'sub',
 'ExpandDims/dim',
 'ExpandDims',
 'import/avgpool0/reshape/shape',
 'import/nn1/reshape/shape',
 'import/head1_bottleneck/reshape/shape',
 'import/nn0/reshape/shape',
 'import/head0_bottleneck/reshape/shape',
 'import/mixed5b/concat_dim',
 'import/mixed5a/concat_dim',
 'import/mixed4e/concat_dim',
 'import/mixed4d/concat_dim',
 'import/mixed4c/concat_dim',
 'import/mixed4b/concat_dim',
 'import/mixed4a/concat_dim',
 'import/mixed3b/concat_dim',
 'import/mixed3a/concat_dim',
 'import/softmax2_b',
 'import/softmax2_w',
 'import/softmax1_b',
 'import/softmax1_w',
 'import/nn1_b',
 'import/nn1_w',
 'import/head1_bottleneck_b',
 'import/head1_bottleneck_w',
 'import/softmax0_b',
 'import/softmax0_w',
 'import/nn0_b',
 'import/nn0_w',
 'import/head0_bottleneck_b',
 'import/head0_bottleneck_w',
 'import/mixed5b_pool_reduce_b',
 'import/mixed5b_pool_reduce_w',
 'import/mixed5b_5x5_b',
 'import/mixed5b_5x5_w',
 'import/mixed5b_5x5_bottleneck_b',
 'import/mixed5b_5x5_bottleneck_w',
 'import/mixed5b_3x3_b',
 'import/mixed5b_3x3_w',
 'import/mixed5b_3x3_bottleneck_b',
 'import/mixed5b_3x3_bottleneck_w',
 'import/mixed5b_1x1_b',
 'import/mixed5b_1x1_w',
 'import/mixed5a_pool_reduce_b',
 'import/mixed5a_pool_reduce_w',
 'import/mixed5a_5x5_b',
 'import/mixed5a_5x5_w',
 'import/mixed5a_5x5_bottleneck_b',
 'import/mixed5a_5x5_bottleneck_w',
 'import/mixed5a_3x3_b',
 'import/mixed5a_3x3_w',
 'import/mixed5a_3x3_bottleneck_b',
 'import/mixed5a_3x3_bottleneck_w',
 'import/mixed5a_1x1_b',
 'import/mixed5a_1x1_w',
 'import/mixed4e_pool_reduce_b',
 'import/mixed4e_pool_reduce_w',
 'import/mixed4e_5x5_b',
 'import/mixed4e_5x5_w',
 'import/mixed4e_5x5_bottleneck_b',
 'import/mixed4e_5x5_bottleneck_w',
 'import/mixed4e_3x3_b',
 'import/mixed4e_3x3_w',
 'import/mixed4e_3x3_bottleneck_b',
 'import/mixed4e_3x3_bottleneck_w',
 'import/mixed4e_1x1_b',
 'import/mixed4e_1x1_w',
 'import/mixed4d_pool_reduce_b',
 'import/mixed4d_pool_reduce_w',
 'import/mixed4d_5x5_b',
 'import/mixed4d_5x5_w',
 'import/mixed4d_5x5_bottleneck_b',
 'import/mixed4d_5x5_bottleneck_w',
 'import/mixed4d_3x3_b',
 'import/mixed4d_3x3_w',
 'import/mixed4d_3x3_bottleneck_b',
 'import/mixed4d_3x3_bottleneck_w',
 'import/mixed4d_1x1_b',
 'import/mixed4d_1x1_w',
 'import/mixed4c_pool_reduce_b',
 'import/mixed4c_pool_reduce_w',
 'import/mixed4c_5x5_b',
 'import/mixed4c_5x5_w',
 'import/mixed4c_5x5_bottleneck_b',
 'import/mixed4c_5x5_bottleneck_w',
 'import/mixed4c_3x3_b',
 'import/mixed4c_3x3_w',
 'import/mixed4c_3x3_bottleneck_b',
 'import/mixed4c_3x3_bottleneck_w',
 'import/mixed4c_1x1_b',
 'import/mixed4c_1x1_w',
 'import/mixed4b_pool_reduce_b',
 'import/mixed4b_pool_reduce_w',
 'import/mixed4b_5x5_b',
 'import/mixed4b_5x5_w',
 'import/mixed4b_5x5_bottleneck_b',
 'import/mixed4b_5x5_bottleneck_w',
 'import/mixed4b_3x3_b',
 'import/mixed4b_3x3_w',
 'import/mixed4b_3x3_bottleneck_b',
 'import/mixed4b_3x3_bottleneck_w',
 'import/mixed4b_1x1_b',
 'import/mixed4b_1x1_w',
 'import/mixed4a_pool_reduce_b',
 'import/mixed4a_pool_reduce_w',
 'import/mixed4a_5x5_b',
 'import/mixed4a_5x5_w',
 'import/mixed4a_5x5_bottleneck_b',
 'import/mixed4a_5x5_bottleneck_w',
 'import/mixed4a_3x3_b',
 'import/mixed4a_3x3_w',
 'import/mixed4a_3x3_bottleneck_b',
 'import/mixed4a_3x3_bottleneck_w',
 'import/mixed4a_1x1_b',
 'import/mixed4a_1x1_w',
 'import/mixed3b_pool_reduce_b',
 'import/mixed3b_pool_reduce_w',
 'import/mixed3b_5x5_b',
 'import/mixed3b_5x5_w',
 'import/mixed3b_5x5_bottleneck_b',
 'import/mixed3b_5x5_bottleneck_w',
 'import/mixed3b_3x3_b',
 'import/mixed3b_3x3_w',
 'import/mixed3b_3x3_bottleneck_b',
 'import/mixed3b_3x3_bottleneck_w',
 'import/mixed3b_1x1_b',
 'import/mixed3b_1x1_w',
 'import/mixed3a_pool_reduce_b',
 'import/mixed3a_pool_reduce_w',
 'import/mixed3a_5x5_b',
 'import/mixed3a_5x5_w',
 'import/mixed3a_5x5_bottleneck_b',
 'import/mixed3a_5x5_bottleneck_w',
 'import/mixed3a_3x3_b',
 'import/mixed3a_3x3_w',
 'import/mixed3a_3x3_bottleneck_b',
 'import/mixed3a_3x3_bottleneck_w',
 'import/mixed3a_1x1_b',
 'import/mixed3a_1x1_w',
 'import/conv2d2_b',
 'import/conv2d2_w',
 'import/conv2d1_b',
 'import/conv2d1_w',
 'import/conv2d0_b',
 'import/conv2d0_w',
 'import/conv2d0_pre_relu/conv',
 'import/conv2d0_pre_relu',
 'import/conv2d0',
 'import/maxpool0',
 'import/localresponsenorm0',
 'import/conv2d1_pre_relu/conv',
 'import/conv2d1_pre_relu',
 'import/conv2d1',
 'import/conv2d2_pre_relu/conv',
 'import/conv2d2_pre_relu',
 'import/conv2d2',
 'import/localresponsenorm1',
 'import/maxpool1',
 'import/mixed3a_pool',
 'import/mixed3a_pool_reduce_pre_relu/conv',
 'import/mixed3a_pool_reduce_pre_relu',
 'import/mixed3a_pool_reduce',
 'import/mixed3a_5x5_bottleneck_pre_relu/conv',
 'import/mixed3a_5x5_bottleneck_pre_relu',
 'import/mixed3a_5x5_bottleneck',
 'import/mixed3a_5x5_pre_relu/conv',
 'import/mixed3a_5x5_pre_relu',
 'import/mixed3a_5x5',
 'import/mixed3a_3x3_bottleneck_pre_relu/conv',
 'import/mixed3a_3x3_bottleneck_pre_relu',
 'import/mixed3a_3x3_bottleneck',
 'import/mixed3a_3x3_pre_relu/conv',
 'import/mixed3a_3x3_pre_relu',
 'import/mixed3a_3x3',
 'import/mixed3a_1x1_pre_relu/conv',
 'import/mixed3a_1x1_pre_relu',
 'import/mixed3a_1x1',
 'import/mixed3a',
 'import/mixed3b_pool',
 'import/mixed3b_pool_reduce_pre_relu/conv',
 'import/mixed3b_pool_reduce_pre_relu',
 'import/mixed3b_pool_reduce',
 'import/mixed3b_5x5_bottleneck_pre_relu/conv',
 'import/mixed3b_5x5_bottleneck_pre_relu',
 'import/mixed3b_5x5_bottleneck',
 'import/mixed3b_5x5_pre_relu/conv',
 'import/mixed3b_5x5_pre_relu',
 'import/mixed3b_5x5',
 'import/mixed3b_3x3_bottleneck_pre_relu/conv',
 'import/mixed3b_3x3_bottleneck_pre_relu',
 'import/mixed3b_3x3_bottleneck',
 'import/mixed3b_3x3_pre_relu/conv',
 'import/mixed3b_3x3_pre_relu',
 'import/mixed3b_3x3',
 'import/mixed3b_1x1_pre_relu/conv',
 'import/mixed3b_1x1_pre_relu',
 'import/mixed3b_1x1',
 'import/mixed3b',
 'import/maxpool4',
 'import/mixed4a_pool',
 'import/mixed4a_pool_reduce_pre_relu/conv',
 'import/mixed4a_pool_reduce_pre_relu',
 'import/mixed4a_pool_reduce',
 'import/mixed4a_5x5_bottleneck_pre_relu/conv',
 'import/mixed4a_5x5_bottleneck_pre_relu',
 'import/mixed4a_5x5_bottleneck',
 'import/mixed4a_5x5_pre_relu/conv',
 'import/mixed4a_5x5_pre_relu',
 'import/mixed4a_5x5',
 'import/mixed4a_3x3_bottleneck_pre_relu/conv',
 'import/mixed4a_3x3_bottleneck_pre_relu',
 'import/mixed4a_3x3_bottleneck',
 'import/mixed4a_3x3_pre_relu/conv',
 'import/mixed4a_3x3_pre_relu',
 'import/mixed4a_3x3',
 'import/mixed4a_1x1_pre_relu/conv',
 'import/mixed4a_1x1_pre_relu',
 'import/mixed4a_1x1',
 'import/mixed4a',
 'import/head0_pool',
 'import/head0_bottleneck_pre_relu/conv',
 'import/head0_bottleneck_pre_relu',
 'import/head0_bottleneck',
 'import/head0_bottleneck/reshape',
 'import/nn0_pre_relu/matmul',
 'import/nn0_pre_relu',
 'import/nn0',
 'import/nn0/reshape',
 'import/softmax0_pre_activation/matmul',
 'import/softmax0_pre_activation',
 'import/softmax0',
 'import/output',
 'import/mixed4b_pool',
 'import/mixed4b_pool_reduce_pre_relu/conv',
 'import/mixed4b_pool_reduce_pre_relu',
 'import/mixed4b_pool_reduce',
 'import/mixed4b_5x5_bottleneck_pre_relu/conv',
 'import/mixed4b_5x5_bottleneck_pre_relu',
 'import/mixed4b_5x5_bottleneck',
 'import/mixed4b_5x5_pre_relu/conv',
 'import/mixed4b_5x5_pre_relu',
 'import/mixed4b_5x5',
 'import/mixed4b_3x3_bottleneck_pre_relu/conv',
 'import/mixed4b_3x3_bottleneck_pre_relu',
 'import/mixed4b_3x3_bottleneck',
 'import/mixed4b_3x3_pre_relu/conv',
 'import/mixed4b_3x3_pre_relu',
 'import/mixed4b_3x3',
 'import/mixed4b_1x1_pre_relu/conv',
 'import/mixed4b_1x1_pre_relu',
 'import/mixed4b_1x1',
 'import/mixed4b',
 'import/mixed4c_pool',
 'import/mixed4c_pool_reduce_pre_relu/conv',
 'import/mixed4c_pool_reduce_pre_relu',
 'import/mixed4c_pool_reduce',
 'import/mixed4c_5x5_bottleneck_pre_relu/conv',
 'import/mixed4c_5x5_bottleneck_pre_relu',
 'import/mixed4c_5x5_bottleneck',
 'import/mixed4c_5x5_pre_relu/conv',
 'import/mixed4c_5x5_pre_relu',
 'import/mixed4c_5x5',
 'import/mixed4c_3x3_bottleneck_pre_relu/conv',
 'import/mixed4c_3x3_bottleneck_pre_relu',
 'import/mixed4c_3x3_bottleneck',
 'import/mixed4c_3x3_pre_relu/conv',
 'import/mixed4c_3x3_pre_relu',
 'import/mixed4c_3x3',
 'import/mixed4c_1x1_pre_relu/conv',
 'import/mixed4c_1x1_pre_relu',
 'import/mixed4c_1x1',
 'import/mixed4c',
 'import/mixed4d_pool',
 'import/mixed4d_pool_reduce_pre_relu/conv',
 'import/mixed4d_pool_reduce_pre_relu',
 'import/mixed4d_pool_reduce',
 'import/mixed4d_5x5_bottleneck_pre_relu/conv',
 'import/mixed4d_5x5_bottleneck_pre_relu',
 'import/mixed4d_5x5_bottleneck',
 'import/mixed4d_5x5_pre_relu/conv',
 'import/mixed4d_5x5_pre_relu',
 'import/mixed4d_5x5',
 'import/mixed4d_3x3_bottleneck_pre_relu/conv',
 'import/mixed4d_3x3_bottleneck_pre_relu',
 'import/mixed4d_3x3_bottleneck',
 'import/mixed4d_3x3_pre_relu/conv',
 'import/mixed4d_3x3_pre_relu',
 'import/mixed4d_3x3',
 'import/mixed4d_1x1_pre_relu/conv',
 'import/mixed4d_1x1_pre_relu',
 'import/mixed4d_1x1',
 'import/mixed4d',
 'import/head1_pool',
 'import/head1_bottleneck_pre_relu/conv',
 'import/head1_bottleneck_pre_relu',
 'import/head1_bottleneck',
 'import/head1_bottleneck/reshape',
 'import/nn1_pre_relu/matmul',
 'import/nn1_pre_relu',
 'import/nn1',
 'import/nn1/reshape',
 'import/softmax1_pre_activation/matmul',
 'import/softmax1_pre_activation',
 'import/softmax1',
 'import/output1',
 'import/mixed4e_pool',
 'import/mixed4e_pool_reduce_pre_relu/conv',
 'import/mixed4e_pool_reduce_pre_relu',
 'import/mixed4e_pool_reduce',
 'import/mixed4e_5x5_bottleneck_pre_relu/conv',
 'import/mixed4e_5x5_bottleneck_pre_relu',
 'import/mixed4e_5x5_bottleneck',
 'import/mixed4e_5x5_pre_relu/conv',
 'import/mixed4e_5x5_pre_relu',
 'import/mixed4e_5x5',
 'import/mixed4e_3x3_bottleneck_pre_relu/conv',
 'import/mixed4e_3x3_bottleneck_pre_relu',
 'import/mixed4e_3x3_bottleneck',
 'import/mixed4e_3x3_pre_relu/conv',
 'import/mixed4e_3x3_pre_relu',
 'import/mixed4e_3x3',
 'import/mixed4e_1x1_pre_relu/conv',
 'import/mixed4e_1x1_pre_relu',
 'import/mixed4e_1x1',
 'import/mixed4e',
 'import/maxpool10',
 'import/mixed5a_pool',
 'import/mixed5a_pool_reduce_pre_relu/conv',
 'import/mixed5a_pool_reduce_pre_relu',
 'import/mixed5a_pool_reduce',
 'import/mixed5a_5x5_bottleneck_pre_relu/conv',
 'import/mixed5a_5x5_bottleneck_pre_relu',
 'import/mixed5a_5x5_bottleneck',
 'import/mixed5a_5x5_pre_relu/conv',
 'import/mixed5a_5x5_pre_relu',
 'import/mixed5a_5x5',
 'import/mixed5a_3x3_bottleneck_pre_relu/conv',
 'import/mixed5a_3x3_bottleneck_pre_relu',
 'import/mixed5a_3x3_bottleneck',
 'import/mixed5a_3x3_pre_relu/conv',
 'import/mixed5a_3x3_pre_relu',
 'import/mixed5a_3x3',
 'import/mixed5a_1x1_pre_relu/conv',
 'import/mixed5a_1x1_pre_relu',
 'import/mixed5a_1x1',
 'import/mixed5a',
 'import/mixed5b_pool',
 'import/mixed5b_pool_reduce_pre_relu/conv',
 'import/mixed5b_pool_reduce_pre_relu',
 'import/mixed5b_pool_reduce',
 'import/mixed5b_5x5_bottleneck_pre_relu/conv',
 'import/mixed5b_5x5_bottleneck_pre_relu',
 'import/mixed5b_5x5_bottleneck',
 'import/mixed5b_5x5_pre_relu/conv',
 'import/mixed5b_5x5_pre_relu',
 'import/mixed5b_5x5',
 'import/mixed5b_3x3_bottleneck_pre_relu/conv',
 'import/mixed5b_3x3_bottleneck_pre_relu',
 'import/mixed5b_3x3_bottleneck',
 'import/mixed5b_3x3_pre_relu/conv',
 'import/mixed5b_3x3_pre_relu',
 'import/mixed5b_3x3',
 'import/mixed5b_1x1_pre_relu/conv',
 'import/mixed5b_1x1_pre_relu',
 'import/mixed5b_1x1',
 'import/mixed5b',
 'import/avgpool0',
 'import/avgpool0/reshape',
 'import/softmax2_pre_activation/matmul',
 'import/softmax2_pre_activation',
 'import/softmax2',
 'import/output2',
 'import/input']


以上就是利用tf.Graph().get_operations()這個函數尋找得到的計算圖中所有的op操作名;然後添加 “if op.type == 'Conv2D' and 'import/' in op.name”這類刷選條件即可找到希望的操作。


tf.Graph().get_operations()

這個函數的help文件解釋如下:

該函數是是tensorflow的python框架下操作圖的實例化,返回的是操作圖中所有操作的一個列表,你可以更改相應的操作名,但對整個操作圖結果沒影響。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章