Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Keras中使用Conv2DTranspose获得与原始输入大小相同的层?_Python_Tensorflow_Keras_Deep Learning_Conv Neural Network - Fatal编程技术网

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)