【问题标题】:What is the difference between these two ways of adding Neural Network layers in Keras?这两种在 Keras 中添加神经网络层的方式有什么区别?
【发布时间】:2016-09-03 14:14:31
【问题描述】:

我使用 Keras 和 Theano 作为后端,并且我有顺序神经网络模型。

我想知道following和following有什么区别吗?

model.add(Convolution2D(32, 3, 3, activation='relu'))

model.add(Convolution2D(32, 3, 3))
model.add(Activation('relu'))

【问题讨论】:

    标签: python neural-network keras conv-neural-network theano


    【解决方案1】:

    它们本质上是相同的。分开放置的好处是可以在中间添加其他层(比如BatchNormalization)。

    在 Keras 中,如果不指定,Convolution2D 默认使用 'linear' 激活,也就是恒等函数

    def linear(x):
        '''
        The function returns the variable that is passed in, so all types work.
        '''
        return x 
    

    Activation 层所做的只是将激活函数应用于输入

    def call(self, x, mask=None):
        return self.activation(x)
    

    编辑:

    所以基本上Convolution2D(activation = 'relu')在执行卷积之后应用relu激活函数,这与在Convolution2D(32, 3, 3)之后应用Activation('relu')相同

    Convolution2D层的call函数的最后两行是

    output = self.activation(output)
    return output
    

    其中output 是卷积的输出。所以我们知道应用激活函数是Convolution2D的最后一步。

    源码:
    Convolution2D层:https://github.com/fchollet/keras/blob/a981a8c42c316831183cac7598266d577a1ea96a/keras/layers/convolutional.py
    Activation层:https://github.com/fchollet/keras/blob/a981a8c42c316831183cac7598266d577a1ea96a/keras/layers/core.py
    激活函数:https://github.com/fchollet/keras/blob/master/keras/activations.py

    【讨论】:

    • 只是为了澄清。所以基本上 Convolution2D(activation = 'relu') 在执行卷积之后应用 relu 激活函数,这与在 Convolution2D(32, 3, 3) 之后应用 Activation('relu') 相同吗?
    • @angubenko 是的,我在答案中添加了一些代码和解释,希望对您有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    • 2017-03-27
    • 2020-10-14
    相关资源
    最近更新 更多