在进行预测时,conv2d_transpose取决于批处理的大小

2024-10-01 11:29:53 发布

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

我有一个目前在tensorflow中实现的神经网络,但是我在训练后做预测时遇到了一个问题,因为我有一个conv2d_转置操作,这些操作的形状取决于批量大小。我有一个层需要output_shape作为参数:

def deconvLayer(input, filter_shape, output_shape, strides):
    W1_1 = weight_variable(filter_shape)

    output = tf.nn.conv2d_transpose(input, W1_1, output_shape, strides, padding="SAME")

    return output

这实际上是在我构建的一个更大的模型中使用的,如下所示:

^{pr2}$

问题是,如果我使用训练过的模型进行预测,我的测试数据必须具有相同的批量大小,否则我会得到以下错误。在

tensorflow.python.framework.errors.InvalidArgumentError: Conv2DBackpropInput: input and out_backprop must have the same batch size

有没有什么方法可以让我对一个批量大小可变的输入进行预测?当我看一下训练过的重量,似乎没有什么取决于批量大小,所以我不明白为什么这会是一个问题。在


Tags: 模型inputoutput参数tensorflowdef神经网络批量
1条回答
网友
1楼 · 发布于 2024-10-01 11:29:53

所以我在https://github.com/tensorflow/tensorflow/issues/833的tensorflow问题论坛上找到了一个解决方案。在

在我的代码里

 conv4 = layers.deconvLayer(conv3['layer_output'],
                                    filter_shape=[2, 2, 64, 128],
                                    output_shape=[batch_size, 32, 40, 64],
                                    strides=[1, 2, 2, 1])

在训练时,我的输出图形被硬编码为预先确定的批处理形状。通过将其更改为以下内容:

^{pr2}$

这允许在运行时动态推断形状,并可以处理可变的批处理大小。在

运行代码时,当传入任何批量大小的测试数据时,我不再收到此错误。我认为这是必要的,因为事实上,转置运算的形状推断目前并不像普通卷积运算那样直接。因此,在通常的卷积运算中,我们通常使用None来表示批处理的大小,因此我们必须提供一个形状,而且由于输入的不同,我们必须进行动态确定。在

相关问题 更多 >