我从Internet上的某个地方获得了示例代码。 它是keras python3.6中简单的CNN + GAN建模代码的一部分。
def __init__(self):
self.img_rows = 28
self.img_cols = 28
self.channels = 1
def build_discriminator(self):
img_shape = (self.img_rows, self.img_cols, self.channels)
model = Sequential()
model.add(Conv2D(64,(5,5), strides=(2,2),\
padding='same', input_shape=img_shape))
model.add(LeakyReLU(0.2))
model.add(Conv2D(128,(5,5),strides=(2,2)))
model.add(LeakyReLU(0.2))
model.add(Flatten())
model.add(Dense(256))
model.add(LeakyReLU(0.2))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))
return model
它实际上有效,但我仍然不明白为什么此过滤器尺寸附带(5,5)。
因为图像大小为28 * 28,并且跨步设置为(2,2),所以每个填充"padding='same'"
必须为1。
所以过滤器的大小必须是(4,4)而不是(5,5)?
谁能解释过滤器尺寸的原因?谢谢。
答案 0 :(得分:0)
这篇文章很好地解释了为什么我们在转换层的过滤器中使用奇数。
一个非常快速的解释(但不完整)是:过滤器需要具有一个中心,对于像(4,4)这样的偶数内核,这是不可能的。