如何找到tfslim输出节点名称

时间:2018-03-27 11:30:04

标签: tensorflow 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 个答案:

答案 0 :(得分:1)

3个初始模型的输出节点名称如下:

初始v3:InceptionV3 / Predictions / Reshape_1
初始v4:InceptionV4 / Logits / Predictions
inception resnet v2:InceptionResnetV2 / Logits / Predictions