我正在尝试在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:是的,有必要用层包装tf操作,因为keras模型需要tensorflow操作中不包含的某些函数/变量。在这种情况下,_keras_history
是一个属性,只能通过用图层包装op来生成。
问题2:矩阵乘法traHave你考虑使用keras Dense
层,use_bias=False
?如果你想为权重向量使用常量,你可以设置kernel_initializer={constant}
和trainable=False
。