我正在尝试使用Keras.backend操作来编写一个函数,我将其作为Lambda包装在我的模型中使用。
有两个张量,X和Y.X不可训练。 Y是可训练的。
包装的python函数是:
import keras.backend as K
from keras.activations import softmax
def _attention(inputs):
X, Y = inputs
attention_weight = K.dot(X, K.expand_dims(Y))
attention_weight = K.squeeze(attention_weight, axis=-1)
attention_weight = softmax(attention_weight, axis=-1)
return attention_weight
我想包装为:
Y = K.random_normal_variable(shape=(200,), mean=0.0, scale=1.0)
attend = Lambda(_attention)
attention = attend((X,Y))
我打电话的时候:
model = Model(inputs=[input], outputs=[attention])
我收到了消息
ValueError: Output tensors to a Model must be the output of a TensorFlow
{图层{1}}
我是否真的需要为expand_dims,dot product和squeeze方法创建自定义图层?我知道我总能重塑Y(dim,) - > (昏暗,1)但我仍然坚持挤压。