Python Can';在Keras中使用Lambda层后不保存模型
我的Keras verison是2.0.8。我添加了以下代码片段:Python Can';在Keras中使用Lambda层后不保存模型,python,keras,Python,Keras,我的Keras verison是2.0.8。我添加了以下代码片段: units = 32 hidden_with_time_axis = Lambda(lambda x: K.expand_dims(x,1))(layer) W1 = Dense(units)(kb_embedding) W2 = Dense(units)(hidden_with_time_axis) out = Add()([W1,W2])
units = 32
hidden_with_time_axis = Lambda(lambda x: K.expand_dims(x,1))(layer)
W1 = Dense(units)(kb_embedding)
W2 = Dense(units)(hidden_with_time_axis)
out = Add()([W1,W2])
score = Lambda(lambda x: K.tanh(x))(out)
out2 = Dense(1)(score)
attention_weights = Lambda(lambda x: K.softmax(x))(out2)
context = Lambda(lambda x: x * kb_embedding)(attention_weights)
context_vector = Lambda(lambda x: K.sum(context,axis=1))(context)
layer = merge([layer,context_vector], mode='concat')
# Classification layers
denseSize = self.getParameter("dense", self.styles, 400, parameters, 1)
if denseSize > 0:
layer = Dense(denseSize, activation='relu')(layer) #layer = Dense(800, activation='relu')(layer)
assert self.cmode in ("binary", "multiclass", "multilabel")
if self.cmode in ("binary", "multilabel"):
layer = Dense(dimLabels, activation='sigmoid')(layer)
else:
layer = Dense(dimLabels, activation='softmax')(layer)
if self.tag == 'entity-' or self.tag =='edge-':
feature_embedding = sum([self.embeddings[x].inputLayers for x in embNames], [])
feature_embedding.append(kb_embedding)
kerasModel = Model(feature_embedding,layer)
然后出现了错误:
TypeError: can't pickle NotImplementedType objects
显然,这是因为如果您没有正确使用Lambda layer,Keras模型无法序列化,但我不知道如何修改我的代码使其工作。在使用tensorflow.Keras.layers.Lambda时,最好使用:
使用tensorflow.keras.layers.Lambda时,最好使用:
什么是
kb_嵌入
?最后一行有一个错误:在lambda
函数中将context
替换为x
。是的,谢谢提醒,我已经修复了它,但仍然存在相同的错误。那么kb\u嵌入是什么?你的代码在我看来并不完整,也就是说,有一部分我们看不到,因此不知道那里发生了什么。kb_嵌入
是一个KerasInput
层,带有一个3d形状kb_嵌入=Input(形状=(11,KBImporter.BIO_W2V_维度),名称='kb')
什么是kb_嵌入
?最后一行有一个错误:在lambda
函数中将context
替换为x
。是的,谢谢提醒,我已经修复了它,但仍然存在相同的错误。那么kb\u嵌入是什么?您的代码在我看来并不完整,即有一部分我们看不到,因此不知道那里发生了什么。kb_嵌入
是一个带有三维形状的KerasInput
层kb_嵌入=Input(形状=(11,KBImporter.BIO_W2V_维度),名称='kb')