如果指定输出数量,如何在CNN中计算输出尺寸

时间:2018-09-05 08:17:22

标签: python tensorflow machine-learning conv-neural-network

我在弄清楚每个CNN层的尺寸时遇到了麻烦。

假设我的输入是一个向量,然后我使用一个完全连接的层将其投影到4x4x256矩阵上……

zP = slim.fully_connected(
    z,
    4*4*256,
    normalizer_fn=slim.batch_norm,
    activation_fn=tf.nn.relu,
    scope='g_project',
    weights_initializer=initializer
)

# Layer is reshaped to a 4x4x256 mapping.
zCon = tf.reshape(zP,[-1,4,4,256])

z是我的原始向量。然后,我将这个4x4x256矩阵放入CNN ...

gen1 = slim.convolution2d_transpose(
    zCon,
    num_outputs=64,
    kernel_size=[5,5],
    stride=[2,2],
    padding="SAME",
    normalizer_fn=slim.batch_norm,
    activation_fn=tf.nn.relu,
    scope='g_conv1', 
    weights_initializer=initializer
)

如您所见,我使用了卷积2d转置,并将输出指定为 64 ,跨度为 2 ,过滤器大小为 5 < / em>。这意味着我知道我的一个维度是 64 ,但是我不知道其他两个维度是什么,也不知道如何计算。

我尝试使用以下公式,但对我而言不起作用...

enter image description here

如何计算剩余尺寸?

1 个答案:

答案 0 :(得分:1)

您编写的公式用于卷积运算,因为您需要计算transposed convolution的形状是卷积的逆数,因此可以通过将上述项重新安排为:

W = (Out-1)*S + F - 2P

W是您的实际输出,而Out是您对transpose convolution的实际输入。