首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角化层的反褶积层

角化层的反褶积层
EN

Stack Overflow用户
提问于 2018-05-29 10:20:10
回答 1查看 2.9K关注 0票数 3

我试着用角蟒设计CNN的架构。我想将(对于我的译码器)从反卷积层5(512个滤波器大小为4x4)转换到下一层(使用deconvolution2D),并转换到具有滤波器大小7x7的反卷积层6128滤波器。我怎样才能进行反褶积?我尝试了以下几点:

代码语言:javascript
复制
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)和相同数目的滤波器,使用简单的卷积从(8x8)(7x7)

代码语言:javascript
复制
d6 = Convolution2D(128, 3, 3,   activation='relu', border_mode='same')(d6)

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-29 14:39:13

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

使用subsample=(2,2),您必须将图像的一半大小,因此逆卷积必然是图像大小的两倍。这里没有什么可以做的,除非您开始使用8x8或删除subsample。(如果您开始过多地使用内核大小、边框模式和子示例的组合,您可能会实现7x7,但除了是一个令人困惑的数学之外,它还可能创建一个不平衡的图像,例如,向左或向右更多。当你的图像那么小时,这可能会影响结果)

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

我建议你搬到凯拉斯2号去。

示例:

代码语言:javascript
复制
#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)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50581917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档