我正在使用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})
我知道我可以用一个额外的层替换我的函数并避免出现此问题,但是我想知道是否有一种方法可以使这项工作正常进行。
谢谢。
答案 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()
。