如何控制转置卷积层的输出

时间:2019-07-26 08:32:59

标签: python tensorflow keras

我正在使用具有tensorflow的keras,有时我想将Conv2DTranspose()(即错误地称为反卷积)应用于图层,以便将其添加到具有大约两倍大小的另一图层中。

为了更具体地解决这个问题,我正在使用Single Shot Detector,并且我想添加conv3_3conv4_3层,它们在我的网络(这是自定义层)中具有以下尺寸:< / p>

conv3_3: 75, 155, x
conv4_3: 38, 78, 2*x

所以当我申请时:

conv4_3_trans = Conv2DTranspose(filters=filters[2],  kernel_size=(2, 2), strides=(2, 2), padding='same', name='conv4_3_deconv')(conv4_3)

给出一个尺寸为76, 156, x的图层作为输出,显然每个尺寸都相差1个像素。因此,口译人员自然在抱怨它。我已经在here中检查了解决方案,但是那里的OP对获取具有特定尺寸的图层不感兴趣。

如果我使用kernel_size参数,例如kernel_size=(1, 1)不会更改输出(与76, 156, x相同)。同样,padding='same'padding='valid'的结果也相同。

所以,我想知道是否有任何方法可以使用keras代码控制我的输出?有什么我可以用来获取所需输出的东西吗?

我发现的一种解决方案(会使代码其他部分的结果变得更加复杂)是使用稍大的图像作为原始输入:我可以使用{{而不是图像(620, 300) 1}},经过2个缩减后,它们将得到偶数,而(624, 304)将得到相同的尺寸。也许也可以使用Conv2DTranspose(),但我对UpSampling2D()感兴趣,以便拥有可训练的参数。

0 个答案:

没有答案