从SavedModel格式还原的模型中输入形状的Tensorflow不匹配

时间:2020-02-08 09:13:40

标签: python tensorflow

我从SavedModel格式恢复了一个Tensorflow模型,并在最后添加了一个新层,以便我可以对其进行微调。但是,我意识到从SavedModel格式到模型的标签是形状(?,256,256,2),而我当前的标签是(?,256,256,4)。结果,我收到此错误:

ValueError: Cannot feed value of shape (16, 256, 256, 4) for Tensor 'labels_1:0', which has shape '(?, 256, 256, 2)'

是否可以通过某种方式修改从SavedModel格式还原的原始模型的输入?还是从原始模型中手动提取权重并将其分配给同一模型的新版本的唯一方法?

以下是我正在使用的代码示例:

meta_graph_def = tf.saved_model.loader.load(
                    sess,
                    [tf.saved_model.tag_constants.SERVING],
                    model_path
                    )
relu_op = sess.graph.get_tensor_by_name('model/Relu_1:0')
with tf.variable_scope('fine_tune_layer'):
     tune_conv_layer = slim.conv2d(relu_op,
                      output_channels,
                      1,
                      stride=1,
                      rate = 1,
                      padding=('SAME'),
                      activation_fn=None
                      )

1 个答案:

答案 0 :(得分:0)

我认为您没有正确添加新图层。您添加了哪一层?您似乎以某种方式对频道进行了升频。您使用tf.keras.layers.Conv2DTranspose之类的东西还是tf.keras.layers.Conv2D之类的东西?可以共享一些代码吗?

您应该有类似的内容:

model = tf.saved_model.load("./saved_model") # has output shape (?, 256, 256, 2)
model.add(tf.keras.layers.Conv2DTranspose(4)) # (?, 256, 256, 4)
model.compile(loss_function, optimizer)
model.fit(...)

请注意,上面的代码很粗糙,只是为了给您一个想法,我不知道您要做什么。