如何在keras模型中使用tf操作

时间:2017-12-17 22:52:19

标签: python tensorflow keras matrix-multiplication attributeerror

我正在尝试使用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中进行矩阵乘法?

感谢。

1 个答案:

答案 0 :(得分:3)

问题1:是的,有必要用图层包装tf操作,因为keras模型需要某些函数/变量,这些函数/变量不包含在tensorflow操作中。在这种情况下,_keras_history是仅通过使用图层包装op而生成的属性。

问题2:矩阵乘法是否考虑使用keras Dense图层use_bias=False?如果您想为权重向量使用常量,可以设置kernel_initializer={constant}trainable=False