使用tensorflow conv2d_转置时匹配形状
我正在尝试使用tensorflow创建卷积变分自动编码器。在解码器中,我尝试使用tf.layers.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
# 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的形状。 或者,可以在所有上采样层之后填充最终输出。
可能重复此项以获取正确的尺寸:。直接转到摘要部分。