你如何在 Python 中使用 Keras LeakyReLU?
Posted
技术标签:
【中文标题】你如何在 Python 中使用 Keras LeakyReLU?【英文标题】:How do you use Keras LeakyReLU in Python? 【发布时间】:2018-07-27 11:07:26 【问题描述】:我正在尝试使用 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'])
我想使用 Keras 的 LeakyReLU 激活层,而不是使用 Activation('relu')
。但是,我尝试使用 LeakyReLU(alpha=0.1)
,但这是 Keras 中的激活层,我收到关于使用激活层而不是激活函数的错误。
在本例中如何使用 LeakyReLU?
【问题讨论】:
【参考方案1】:Keras 中的所有高级激活,包括LeakyReLU
,都以layers 的形式提供,而不是以激活的形式提供;因此,您应该这样使用它:
from keras.layers import LeakyReLU
# instead of cnn_model.add(Activation('relu'))
# use
cnn_model.add(LeakyReLU(alpha=0.1))
【讨论】:
我用过这个方法,但是报错:ValueError: Unknown activation function: LeakyRelu.请确保将此对象传递给custom_objects
参数。见
@TariqS 请打开一个包含确切细节的新问题;如有必要,请在此处链接【参考方案2】:
有时您只想直接替换内置激活层,而不必为此添加额外的激活层。
为此,您可以使用 activation
参数可以是可调用对象这一事实。
lrelu = lambda x: tf.keras.activations.relu(x, alpha=0.1)
model.add(Conv2D(..., activation=lrelu, ...)
由于Layer
也是一个可调用对象,您也可以简单地使用
model.add(Conv2D(..., activation=tf.keras.layers.LeakyReLU(alpha=0.1), ...)
现在可以在 TF2 中使用。这是一个更好的解决方案,因为这避免了在加载过程中使用custom_object
的需要,正如@ChristophorusReyhan 提到的那样。
【讨论】:
非常方便的方法可以避免为了泄漏而创建单独的层,这正是我想要的! 在 tf2.0 中我不得不稍微修改一下:lrelu = lambda x: tf.keras.layers.LeakyReLU(alpha=0.1)(x)
加载保存的模型,使用:keras.models.load_model("/path/to/model.h5", custom_objects = '<lambda>': lrelu )
以上是关于你如何在 Python 中使用 Keras LeakyReLU?的主要内容,如果未能解决你的问题,请参考以下文章
使用Python+OpenCV+Keras创建自己的图像分类模型
keras 和 scikit-learn 中 MLP 回归器的不同损失值和准确度