gpt4 book ai didi

python - 如何使用 Keras 中的 Conv2DTranspose 获得与原始输入大小相同的层?

转载 作者:行者123 更新时间:2023-12-01 07:58:56 25 4
gpt4 key购买 nike

这是我的模型的摘要。 enter image description here

我的模型基本上类似于卷积网络。

我希望我的模型能够工作,无论输入的宽度如何。因此宽度大小显示为None

我使用 Conv2DTranspose 将解码器附加到我的模型。

但是,有一个问题。

我期望 Conv2DTranspose 的结果与输入的大小相同,但它不一样。

我将stride设置为2以减少参数数量,padding模式是same,但当尺寸为奇数时我发现了一个问题。

以下函数用于ConvCapsuleLayer(自定义层)中的卷积运算。

conv = K.conv2d(input_tensor_reshaped, self.W, (self.strides, self.strides),
padding=self.padding, data_format='channels_last')

我使用 Conv2DTranspose 作为解码器,如下所示。

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 (see above for traceback): Incompatible shapes: [1,200,824,1] vs. [1,200,823,1]

当尺寸为奇数时,如何解决这种差异?

最佳答案

如果您使用 2 倍的连续下采样(由于步长),然后进行反卷积 (Conv2DTranspose),将大小乘以 2(同样由于步长=2),则只能使用偶数维度。

如果您绝对必须拥有奇数维度的输入,则必须使用填充或丢弃一行。如果您使用连续的下采样操作(无论是使用步幅还是使用 MaxPooling),您还必须小心。在每次降维操作之前,您的维度必须是下采样因子的倍数。

关于python - 如何使用 Keras 中的 Conv2DTranspose 获得与原始输入大小相同的层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55810077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com