gpt4 book ai didi

python - keras中的反卷积层

转载 作者:太空宇宙 更新时间:2023-11-04 02:25:08 28 4
gpt4 key购买 nike

我正在尝试在 keras python 中设计一个 CNN 架构。我想将(对于我的解码器)从反卷积层 5(512 个滤波器,滤波器大小为 4x4)转换到下一层(使用 deconvolution2D),然后转到反卷积层 6 128 个滤波器,滤波器大小为 7x7 .我该怎么做反卷积?我尝试的是以下内容:

d6 = Deconvolution2D(128, 5, 5, subsample=(2,2),  activation='relu',init='uniform', output_shape=(None, 128, 7, 7), border_mode='same')(d6)

但是,此操作会产生 128 个大小为 8x8 的过滤器。我怎样才能拥有 7x7

我还尝试通过选择过滤器大小 (3x3) 使用简单卷积从 (8x8)(7x7) 和相同数量的过滤器:

d6 = Convolution2D(128, 3, 3,   activation='relu', border_mode='same')(d6)

但是,最后的结果还是相同的 (128,8,8) 而不是 (128, 7, 7)

最佳答案

在第一种情况下,问题在于您对 subsample(当前为“strides”)使用偶数,而对图像大小使用奇数。

使用subsample=(2,2),您必然会将图像大小减半,因此逆卷积必然会使图像大小加倍。除非您开始使用 8x8 或删除 subsample,否则您在这里无能为力。 (如果你开始过多地使用内核大小、边界模式和子样本的组合,你可能会达到 7 x 7,但除了是一个令人困惑的数学之外,它还可能创建一个不平衡的图像,更偏左或更偏右,例如。当您的图像很小时,这可能会影响结果)

在第二种情况下,结果是相同的,因为您使用的是 border_mode='same'。但是如果你删除它,你的尺寸将从 8x8 变为 6x6。您需要大小为 (2,2) 的过滤器才能仅丢失一个像素。


我建议你迁移到 Keras 2。

例子:

#but I suggest you remove the strides
d6 = Conv2DTranspose(128, (5,5), strides = (2,2), activation = 'relu', padding='same', kernel_initializer='uniform')

#'valid' is the default value, but I wrote it so you see the new name of "border_mode"
d6 = Conv2D(128,(3,3), activation='relu', padding='valid')(d6)

关于python - keras中的反卷积层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50581917/

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