как использовать операции tf в моделях keras

Я пытаюсь использовать операции тензорного потока в модели keras, и я совершенно не понимаю механизм и то, что слои Lambda делают с тензорами tf.

Итак, это работает:

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 (именно поэтому я придумал предыдущий): нужно ли нам упаковывать пользовательский слой, чтобы выполнять матричное умножение в керасе?

Благодарю.


person Fangzhou Zhai    schedule 17.12.2017    source источник


Ответы (1)


Вопрос 1: Да, необходимо обернуть операции tf слоем, потому что модели keras требуют определенных функций/переменных, которые не включены в операции tensorflow. В этом случае _keras_history — это свойство, которое создается только путем обертывания операции слоем.

Вопрос 2: Является ли матричное умножение traHave вы рассматривали использование слоя keras Dense с use_bias=False? Если вы хотите использовать константу для вектора веса, вы можете установить kernel_initializer={constant} и trainable=False.

person kww    schedule 19.12.2017