你如何在Python中使用Keras LeakyReLU?

Jac*_*ute 23 python machine-learning neural-network conv-neural-network keras

我正在尝试使用Keras生成CNN,并编写以下代码:

batch_size = 64
epochs = 20
num_classes = 5

cnn_model = Sequential()
cnn_model.add(Conv2D(32, kernel_size=(3, 3), activation='linear',
                     input_shape=(380, 380, 1), padding='same'))
cnn_model.add(Activation('relu'))
cnn_model.add(MaxPooling2D((2, 2), padding='same'))
cnn_model.add(Conv2D(64, (3, 3), activation='linear', padding='same'))
cnn_model.add(Activation('relu'))
cnn_model.add(MaxPooling2D(pool_size=(2, 2), padding='same'))
cnn_model.add(Conv2D(128, (3, 3), activation='linear', padding='same'))
cnn_model.add(Activation('relu'))
cnn_model.add(MaxPooling2D(pool_size=(2, 2), padding='same'))
cnn_model.add(Flatten())
cnn_model.add(Dense(128, activation='linear'))
cnn_model.add(Activation('relu'))
cnn_model.add(Dense(num_classes, activation='softmax'))

cnn_model.compile(loss=keras.losses.categorical_crossentropy,
                  optimizer=keras.optimizers.Adam(), metrics=['accuracy'])
Run Code Online (Sandbox Code Playgroud)

我想使用KerasLeakyReLU激活层而不是使用Activation('relu').但是,我尝试使用LeakyReLU(alpha=0.1)到位,但这是Keras中的激活层,我收到有关使用激活层而不是激活函数的错误.

在这个例子中如何使用LeakyReLU

des*_*aut 35

Keras的所有高级激活,包括LeakyReLU,都可以作为,而不是激活; 因此,你应该这样使用它:

from keras.layers import LeakyReLU

# instead of cnn_model.add(Activation('relu'))
# use
cnn_model.add(LeakyReLU(alpha=0.1))
Run Code Online (Sandbox Code Playgroud)


P-G*_*-Gn 10

有时,您只想直接替换内置的激活层,而不必为此添加额外的激活层。

为此,您可以使用activation参数可以是函数的事实。

lrelu = lambda x: tf.keras.activations.relu(x, alpha=0.1)
# or since TF2, as @craq mentionned:
lrelu = lambda x: tf.keras.layers.LeakyReLU(alpha=0.1)(x)
model.add(Conv2D(..., activation=lrelu, ...)
Run Code Online (Sandbox Code Playgroud)

  • 在 tf2.0 中,我必须稍微修改一下:`lrelu = lambda x: tf.keras.layers.LeakyReLU(alpha=0.1)(x)` (2认同)
  • 要加载保存的模型,请使用: `keras.models.load_model("/path/to/model.h5", custom_objects = {'<lambda>': lrelu} ) ` (2认同)