keras中的反褶积层

2024-09-29 17:15:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用keraspython设计CNN架构。我想(对于我的解码器)将反褶积层5(512个滤波器大小为4x4)转换到下一层(使用反褶积2d),并转到反褶积第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?在

我还尝试从(8x8)到{},只需选择滤波器大小(3x3)并使用相同数量的过滤器:

^{pr2}$

但是,最后的结果仍然是相同的(128,8,8),而不是{}


Tags: 方法过滤器outputinit架构uniform解码器activation
1条回答
网友
1楼 · 发布于 2024-09-29 17:15:59

在第一种情况下,问题是使用偶数表示subsample(当前为“步长”),而奇数表示图像大小。在

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

在第二种情况下,结果是相同的,因为您使用的是border_mode='same'。但如果你去掉这个,你的尺寸将从8x8变为6x6。你需要一个(2,2)的过滤器大小来只损失一个像素。在


我建议你搬到凯拉斯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)

相关问题 更多 >

    热门问题