如何找到 tfslim 输出节点名称
Posted
技术标签:
【中文标题】如何找到 tfslim 输出节点名称【英文标题】:how to find tfslim output node names 【发布时间】:2018-09-05 19:04:52 【问题描述】:在用 tensorflow 和 slim 训练了一些模型之后,我试图冻结模型和权重。但是我很难找到输出节点名称,这是freeze_graph.freeze_graph()
所必需的。
我的输出层如下所示:
conv4_1 = slim.conv2d(net,num_outputs=2,kernel_size=[1,1],stride=1,scope='conv4_1',activation_fn=tf.nn.softmax)
#conv4_1 = slim.conv2d(net,num_outputs=1,kernel_size=[1,1],stride=1,scope='conv4_1',activation_fn=tf.nn.sigmoid)
print conv4_1.get_shape()
#batch*H*W*4
bbox_pred = slim.conv2d(net,num_outputs=4,kernel_size=[1,1],stride=1,scope='conv4_2',activation_fn=None)
conv4_1 是 softmaxed 类,无论是否面对。 bbox_pred 是边界框回归。
当我使用tf.train.write_graph(self.sess.graph_def, output_path, 'model.pb')
保存图表并将model.pb 作为文本打开时,我发现图表如下所示:
node
name: "conv4_1/weights/Initializer/random_uniform/shape"
...
node
name: "conv4_1/kernel/Regularizer/l2_regularizer"
...
node
name: "conv4_1/Conv2D"
op: "Conv2D"
input: "conv3/add"
input: "conv4_1/weights/read"
...
node
name: "conv4_1/Softmax"
op: "Softmax"
input: "conv4_1/Reshape"
...
node
name: "Squeeze"
op: "Squeeze"
input: "conv4_1/Reshape_1"
attr
key: "T"
value
type: DT_FLOAT
attr
key: "squeeze_dims"
value
list
i: 0
那么,问题来了,输出节点名称是什么?
只有 tensorflow 编写层的方法可以设置“名称”,例如:
.conv(3, 3, 32, 1, 1, padding='VALID', relu=False, name='conv3')
.prelu(name='PReLU3')
.conv(1, 1, 2, 1, 1, relu=False, name='conv4-1')
.softmax(3,name='prob1'))
(self.feed('PReLU3') #pylint: disable=no-value-for-parameter
.conv(1, 1, 4, 1, 1, relu=False, name='conv4-2'))
但我在 tensorflow slim 中找不到设置输出名称的方法。
谢谢!
【问题讨论】:
你解决过这个问题吗? 【参考方案1】:三个初始模型的输出节点名称如下:
inception v3:InceptionV3/Predictions/Reshape_1 inception v4:InceptionV4/Logits/Predictions inception resnet v2 : InceptionResnetV2/Logits/Predictions
【讨论】:
您是如何找到上述 3 个模型的输出节点名称的?我正在寻找 TF Slim Resnet_v1_50 和 Resnet_v2_50 的输入和输出节点名称,但找不到。以上是关于如何找到 tfslim 输出节点名称的主要内容,如果未能解决你的问题,请参考以下文章
Tensorflow 模型:如何从 proto buff 文件中识别输入/输出节点名称?
在张量流中将 SSD 转换为冻结图。必须使用哪些输出节点名称?