这就是我从Internet上的某个地方获取的信息。 这是一个非常简单的GAN + CNN建模代码,特别是对于使用keras python3.6编写的除杂器模型。 它工作正常,但我有一些不清楚的地方。
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
出现了一些激活功能,但是为什么它们都不相同?
如果最后的输出是'sigmoid'
,我认为其余的最好还是相同的功能?
为什么在中间使用LeakyReLU
?谢谢。
答案 0 :(得分:2)
我猜想在其余的层中他们不会使用Sigmoid,因为在使用Sigmoid时,您会遇到一个很大的问题,即深层网络中的梯度消失了。 原因是,S形函数在零附近的两侧均“展平”,从而使朝向输出层的层倾向于产生非常小的梯度,从而产生较小的学习率,因为从广义上讲,较深层的梯度有点像作为推导链规则的结果,是下层梯度的乘积。因此,如果您的乙状结肠层很少,那么您可能会很幸运,但是一旦将其中的几个链在一起,它们就会在渐变中产生不稳定性。
对于我来说,在这里的一篇文章中对其进行解释太复杂了,但是如果您想更详细地了解它,可以在chapter of a online book中阅读它。 顺便说一句。这本书真的很棒。值得更多阅读。可能要理解本章,如果您不知道反向传播的工作原理,则必须先阅读本书的第1章。
答案 1 :(得分:0)
输出层和隐藏层激活功能不必相同。隐藏层激活是学习特征的机制的一部分,因此,重要的是它们不具有消失的梯度问题(如Sigmoid一样),而输出层激活功能与输出任务更相关,例如,用于分类的softmax激活