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

2024-06-30 15:53:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我从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
                      )

Tags: 模型layermodeltftensorflow格式标签graph
1条回答
网友
1楼 · 发布于 2024-06-30 15:53:26

我认为您没有正确地添加新层。你加了哪一层?你似乎不知怎么地对频道进行了上采样。您使用了类似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(...)

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

相关问题 更多 >