我正在尝试使用keras模型中的张量流操作,我对机制以及Lambda层对张量的影响感到很困惑。
这样可行:
a = keras.layers.Input(shape=[1, 2], dtype='float', name='a')
s= keras.layers.Lambda(lambda x: tf.transpose(tf.transpose(x)))(a)
model = keras.models.Model(inputs=a, outputs=s)
但这不起作用:
a = keras.layers.Input(shape=[1, 2], dtype='float', name='a')
s = tf.transpose(tf.transpose(a))
s = keras.layers.Lambda(lambda x: x)(s)
model = keras.models.Model(inputs=a, outputs=s)
它说:
AttributeError: 'Tensor' object has no attribute '_keras_history'
所以总是需要在一个图层中打包tf操作吗?
问题2(这就是为什么我提出了前一个问题):我们是否需要使用自定义图层打包以在keras中进行矩阵乘法?
感谢。
答案 0 :(得分:3)
问题1:是的,有必要用图层包装tf操作,因为keras模型需要某些函数/变量,这些函数/变量不包含在tensorflow操作中。在这种情况下,_keras_history
是仅通过使用图层包装op而生成的属性。
问题2:矩阵乘法是否考虑使用keras Dense
图层use_bias=False
?如果您想为权重向量使用常量,可以设置kernel_initializer={constant}
和trainable=False
。