Keras ValueError:未知激活函数:<lambda>

时间:2019-11-24 17:59:33

标签: python tensorflow keras

我正在使用lambda函数创建自定义激活函数,但是当我尝试上传检查点时出现错误:

ValueError: Unknown activation function:<lambda> 

函数是:

lrelu = lambda x: tf.keras.activations.relu(x, alpha=0.2)

并以此方式使用:

Conv2D(filters=96, kernel_size=(3,3),strides=(2,2),activation=lrelu)

我尝试添加没有运气的custom_objects:

model = load_model(filepath, custom_objects = {"lrelu": lrelu})

我知道我可以用一个额外的层替换我的函数并避免出现此问题,但是我想知道是否有一种方法可以使这项工作正常进行。

谢谢。

2 个答案:

答案 0 :(得分:1)

您将需要Lambda层包装器-以下是最小示例。

from keras.layers import Input, Conv2D, Lambda
from keras.models import Model
import tensorflow as tf
import numpy as np

lrelu = Lambda(lambda x: tf.keras.activations.relu(x, alpha=0.2))

ipt   = Input((4,4,3))
out   = Conv2D(3, 1, activation=lrelu)(ipt)
model = Model(ipt, out)
model.compile('adam', 'mse')

x = np.random.randn(32,4,4,3)
model.fit(x, x)
32/32 [==============================] - 6s 201ms/sample - loss: 2.1475

答案 1 :(得分:0)

不幸的是,这似乎是Keras的问题。

解决方法是添加一个单独的激活层:

model.add(Dense(units=128))
model.add(Lambda(lambda x: custom_activation(x, salience_array[0])))

注意:要保存和加载模型,请使用Lambda()而不是Activation()

参考:https://github.com/keras-team/keras/issues/8880