我试着用角蟒设计CNN的架构。我想将(对于我的译码器)从反卷积层5(512个滤波器大小为4x4)转换到下一层(使用deconvolution2D),并转换到具有滤波器大小7x7的反卷积层6128滤波器。我怎样才能进行反褶积?我尝试了以下几点:
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):
d6 = Convolution2D(128, 3, 3, activation='relu', border_mode='same')(d6)但是,最终的结果还是相同的(128,8,8)而不是(128, 7, 7)。
发布于 2018-05-29 14:39:13
在第一种情况下,问题是您使用偶数表示subsample (当前的“大步”),使用奇数表示图像大小。
使用subsample=(2,2),您必须将图像的一半大小,因此逆卷积必然是图像大小的两倍。这里没有什么可以做的,除非您开始使用8x8或删除subsample。(如果您开始过多地使用内核大小、边框模式和子示例的组合,您可能会实现7x7,但除了是一个令人困惑的数学之外,它还可能创建一个不平衡的图像,例如,向左或向右更多。当你的图像那么小时,这可能会影响结果)
在第二种情况下,结果是相同的,因为您使用的是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)https://stackoverflow.com/questions/50581917
复制相似问题