relu作为Dense()(或其他任何层)中的参数,而ReLu作为Keras中的层

时间:2019-12-25 08:30:26

标签: python keras deep-learning neural-network

我只是想知道

的用途和特色之间是否有显着差异?
Dense(activation='relu')

keras.layers.ReLu

后面的方法可以在何处使用?我最好的猜测是在Functional API用例中,但我不知道如何。

2 个答案:

答案 0 :(得分:1)

创建一些将激活作为参数的Layer实例,即activation='relu'与创建某个Layer实例,然后创建激活,例如Relu个实例。 Relu()是一层在K.relu()上返回inputs函数的层:

class ReLU(Layer):
.
.
.
     def call(self, inputs):
            return K.relu(inputs,
                          alpha=self.negative_slope,
                          max_value=self.max_value,
                          threshold=self.threshold)

来自Keras文档:

  

激活的使用

     

激活既可以通过激活层使用,也可以通过   所有人都支持的激活参数   前向层:

from keras.layers import Activation, Dense

model.add(Dense(64))
model.add(Activation('tanh'))
     

这等效于:

model.add(Dense(64, activation='tanh'))
     

您还可以按元素传递TensorFlow / Theano / CNTK函数   激活:

from keras import backend as K

model.add(Dense(64, activation=K.tanh))

更新

回答OP的附加问题:如何以及在哪里使用后者?

您可以在使用某些不接受activation参数(例如,例如tf.keras.layers.Addtf.keras.layers.Subtract等,但是您希望得到这样的层的校正输出:

added = tf.keras.layers.Add()([x1, x2])
relu = tf.keras.layers.ReLU(added)

答案 1 :(得分:0)

最明显的用例是,当您需要放置没有Dense层的ReLU时,例如,在实现ResNet时,该设计要求在求和剩余连接后再激活ReLU,如图{{3 }}:

x = layers.add([x, shortcut])
x = layers.Activation('relu')(x)
return x

当您想在BatchNormalization层的预激活和ReLU激活之间放置Dense层时,它也很有用。当使用GlobalAveragePooling分类器时(例如在SqueezeNet体系结构中),则需要使用Activation("softmax")在GAP之后放置softmax激活,并且网络中没有Dense层。 / p>

可能还有更多情况,这些只是示例。