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框架下操作图的实例化,返回的是操作图中所有操作的一个列表,你可以更改相应的操作名,但对整个操作图结果没影响。

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