Keras简单数学运算模型失败,“输出张量到模型必须是Keras张量”

时间:2017-04-21 09:00:17

标签: python tensorflow keras backend

我想定义一个使用基本数学运算的简单模型。我尝试使用多种方法实现它,但最明显的方法失败了,我想了解原因。

让我们看一下代码:

import keras.backend as K
from keras.layers import Input, Lambda
from keras.models import Model
import numpy as np

x = Input(shape=(3,))
y = Lambda(lambda x: x ** 2)(x)
print y
# Tensor("lambda_1/pow:0", shape=(?, 3), dtype=float32)
model = Model(inputs=x, outputs=y)
# Works!

y = x ** 2
print y
# Tensor("pow:0", shape=(?, 3), dtype=float32)
model = Model(inputs=x, outputs=y)
# Fails: TypeError: Output tensors to a Model must be Keras tensors.

y = K.pow(x, 2)
print y
# Tensor("Pow:0", shape=(?, 3), dtype=float32)
model = Model(inputs=x, outputs=y)
# Fails: TypeError: Output tensors to a Model must be Keras tensors. 

如您所见,所有模型的y输出几乎相同,但直观的输出因某些原因而失败。

1 个答案:

答案 0 :(得分:0)

收到答案:https://github.com/fchollet/keras/issues/6443#issuecomment-298259821

  

这里x和y都应该是Keras层的输出。

x是Input层的输出,在上面的例子中,y是Lambda层的输出。也可以编写自定义图层:https://keras.io/layers/writing-your-own-keras-layers/