为什么不是所有的激活功能都相同?

时间:2019-07-04 10:21:49

标签: python tensorflow keras

这就是我从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?谢谢。

2 个答案:

答案 0 :(得分:2)

我猜想在其余的层中他们不会使用Sigmoid,因为在使用Sigmoid时,您会遇到一个很大的问题,即深层网络中的梯度消失了。 原因是,S形函数在零附近的两侧均“展平”,从而使朝向输出层的层倾向于产生非常小的梯度,从而产生较小的学习率,因为从广义上讲,较深层的梯度有点像作为推导链规则的结果,是下层梯度的乘积。因此,如果您的乙状结肠层很少,那么您可能会很幸运,但是一旦将其中的几个链在一起,它们就会在渐变中产生不稳定性。

对于我来说,在这里的一篇文章中对其进行解释太复杂了,但是如果您想更详细地了解它,可以在chapter of a online book中阅读它。 顺便说一句。这本书真的很棒。值得更多阅读。可能要理解本章,如果您不知道反向传播的工作原理,则必须先阅读本书的第1章。

答案 1 :(得分:0)

输出层和隐藏层激活功能不必相同。隐藏层激活是学习特征的机制的一部分,因此,重要的是它们不具有消失的梯度问题(如Sigmoid一样),而输出层激活功能与输出任务更相关,例如,用于分类的softmax激活