我只是想知道
的用途和特色之间是否有显着差异?Dense(activation='relu')
和
keras.layers.ReLu
后面的方法可以在何处使用?我最好的猜测是在Functional API用例中,但我不知道如何。
答案 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.Add
,tf.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>
可能还有更多情况,这些只是示例。