Python 如何在Keras中使用Conv2DTranspose获得与原始输入大小相同的层?
这是我的模型的摘要。 我的模型基本上类似于卷积网络 我希望无论输入的宽度如何,我的模型都能工作。因此,宽度大小显示为Python 如何在Keras中使用Conv2DTranspose获得与原始输入大小相同的层?,python,tensorflow,keras,deep-learning,conv-neural-network,Python,Tensorflow,Keras,Deep Learning,Conv Neural Network,这是我的模型的摘要。 我的模型基本上类似于卷积网络 我希望无论输入的宽度如何,我的模型都能工作。因此,宽度大小显示为None 我使用conv2dtranpse将解码器连接到我的模型上 然而,有一个问题 我希望conv2dtranpse的结果与输入的大小相同,但结果不一样 我将stride设置为2以减少参数数量,padding的模式是相同的,但当大小为奇数时,我发现了一个问题 以下函数用于convecapsulelayer(自定义层)中的卷积运算 我对解码器使用了conv2dtranpse,如下
None
我使用conv2dtranpse
将解码器连接到我的模型上
然而,有一个问题
我希望conv2dtranpse
的结果与输入的大小相同,但结果不一样
我将stride
设置为2
以减少参数数量,padding
的模式是相同的
,但当大小为奇数时,我发现了一个问题
以下函数用于convecapsulelayer(自定义层)
中的卷积运算
我对解码器使用了conv2dtranpse
,如下所示
recon_1 = layers.Conv2DTranspose(4, (5,5), strides=(2, 2), padding='same', kernel_initializer='he_normal', name='decoder_1', activation='relu')(mask_layer)
recon_2 = layers.Conv2DTranspose(8, (5,5), strides=(2, 2), padding='same', kernel_initializer='he_normal', name='decoder_2', activation='relu')(recon_1)
recon_3 = layers.Conv2DTranspose(1, (1,1), strides=(1, 1), padding='same', kernel_initializer='he_normal', name='decoder_3', activation='linear')(recon_2)
然后我得到以下错误消息
InvalidArgumentError(回溯见上文):不兼容的形状:[1200824,1]与[1200823,1]
当大小为奇数时,如何解决此差异 如果使用连续的下采样(由于步幅),然后使用反褶积(Conv2DTranspose)将大小乘以2(同样是du到步幅=2),则只能使用偶数尺寸
如果您必须使用奇数维输入,则必须使用填充或丢弃一行。如果使用连续下采样操作(步幅或最大池),也必须小心。在减少维度的每个操作之前,必须有一个维度是下采样因子的倍数。我发现我可以使用
output\u padding
来设置输出形状。你能告诉我一些关于它的信息吗?我从哪里可以得到关于它的信息?在你可以看一看文档的末尾,有一个公式解释了output\u shape
是如何受步长、内核大小、填充和输出填充的影响的。你还应该看看下面作为参考链接的两篇论文。
recon_1 = layers.Conv2DTranspose(4, (5,5), strides=(2, 2), padding='same', kernel_initializer='he_normal', name='decoder_1', activation='relu')(mask_layer)
recon_2 = layers.Conv2DTranspose(8, (5,5), strides=(2, 2), padding='same', kernel_initializer='he_normal', name='decoder_2', activation='relu')(recon_1)
recon_3 = layers.Conv2DTranspose(1, (1,1), strides=(1, 1), padding='same', kernel_initializer='he_normal', name='decoder_3', activation='linear')(recon_2)