我正在使用具有tensorflow的keras,有时我想将Conv2DTranspose()
(即错误地称为反卷积)应用于图层,以便将其添加到具有大约两倍大小的另一图层中。
为了更具体地解决这个问题,我正在使用Single Shot Detector,并且我想添加conv3_3
和conv4_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()
感兴趣,以便拥有可训练的参数。