使用tensorflow conv2d_转置时匹配形状

使用tensorflow conv2d_转置时匹配形状,tensorflow,convolution,Tensorflow,Convolution,我正在尝试使用tensorflow创建卷积变分自动编码器。在解码器中,我尝试使用tf.layers.conv2d_转置来执行上采样。然而,我无法理解如何匹配尺寸。例如,这是我的代码: # shape: (-1, 26, 26, 32) conv1 = tf.layers.conv2d( image_batch, filters=32, kernel_size=3, strides=1, activation=tf.nn.relu) # shap

我正在尝试使用tensorflow创建卷积变分自动编码器。在解码器中,我尝试使用tf.layers.conv2d_转置来执行上采样。然而,我无法理解如何匹配尺寸。例如,这是我的代码:

# shape: (-1, 26, 26, 32)
conv1 = tf.layers.conv2d(
     image_batch,
     filters=32,
     kernel_size=3,
     strides=1,
     activation=tf.nn.relu)

# shape: (-1, 24, 24, 16)
conv2 = tf.layers.conv2d(
    conv1,
    filters=16,
    kernel_size=3,
    strides=1,
    activation=tf.nn.relu)

#shape: (-1, 11, 11, 8)
conv3 = tf.layers.conv2d(
    conv2,
    filters=8,
    kernel_size=3,
    strides=2,
    activation=tf.nn.relu) 

#shape: (-1, 23, 23, 16)
deconv1 = tf.layers.conv2d_transpose(
    conv3,
    filters=16,
    kernel_size=3,
    strides=2)

#shape: (-1, 25, 25, 32)
deconv2 = tf.layers.conv2d_transpose(
    deconv1,
    filters=32,
    kernel_size=3,
    strides=1)

#shape: (-1, 27, 27, 1)
deconv3 = tf.layers.conv2d_transpose(
    deconv2,
    filters=1,
    kernel_size=3,
    strides=1)
```


我们可以看到尺寸不匹配。是否有任何数学公式可以用来返回正确的维度,或者我的代码是否有问题?

这里的问题是因为conv3。在conv3中,使用的是步长为2、内核大小为3的卷积。这会将您的输入限制为奇数形状,但是,您的输入形状是24、24、16。因此,仅对23、23、16执行卷积,并且忽略边界像素。有关如何计算输出形状的详细信息,请参阅此部分

现在,当你试着从11,11,8向上采样时,它将向上采样到获得它的形状,即,`23,23,16。因此,这会在输入形状和上采样形状之间创建错误

您可以使用多种选项来解决此问题-

找到步幅和内核大小的正确组合,这样就不会忽略任何值。这将使输入形状和上采样形状保持一致。 进行上采样时,仅手动将输出填充到一侧,以从形状23、23、16创建24、24、16的形状。 或者,可以在所有上采样层之后填充最终输出。
可能重复此项以获取正确的尺寸:。直接转到摘要部分。