错误 - 输入不是符号张量 - 布尔值
Error - input that isn't a symbolic tensor - Boolean
由于二元交叉熵损失,我正在尝试调整 Dense
层的权重。 A 创建了一个共享层,它为两个向量输出两个值(encoded_value_1
和 encoded_value_2
)。如果 encoded_value_1
的值优于 encoded_value_2
的值,我想创建一个等于 1 的布尔值。
为此,我通过 Lambda
层使用 greater
。然而,它会产生错误(见下文)。
import keras
from keras.backend import greater
from keras.layers import Input, LSTM, Dense, Lambda, concatenate
from keras.models import Model
value_1 = Input(shape=(4,))
value_2 = Input(shape=(4,))
shared_layer = Dense(1)
encoded_value_1 = shared_layer(value_1)
encoded_value_2 = shared_layer(value_2)
x = Lambda(greater,output_shape=(1,))((encoded_value_1,encoded_value_2))
model = Model(inputs=[value_1, value_2], outputs=x)
model.compile(optimizer='adam',loss='binary_crossentropy', metrics='accuracy'])
注意:我也试过连接两层,我有同样的错误。
merged_vector = concatenate([encoded_value_1, encoded_value_2], axis=-1)
x = Lambda(greater,output_shape=(1,))((merged_vector[0],merged_vector[1]))
ValueError: Layer lambda_4 was called with an input that isn't a symbolic tensor. Received type: . Full input: [(, )]. All inputs to the layer should be tensors.
有三点:
当Lambda
层有多个输入时,输入必须作为张量列表传递,而不是元组。
greater
的输出是一个 bool 张量,您需要将其转换为浮点数以对其进行计算。
greater
接受两个输入,因此您需要将其包装在 python lambda
函数中以便能够在 Lambda
Keras 中的图层。
因此,我们将有:
from keras import backend as K
# ...
x = Lambda(lambda z: K.cast(K.greater(z[0], z[1]), K.floatx()),output_shape=(1,))([encoded_value_1,encoded_value_2])
也不要忘记 metrics
参数缺少的左括号:
..., metrics=['accuracy'])
^
|
|
missing!
由于二元交叉熵损失,我正在尝试调整 Dense
层的权重。 A 创建了一个共享层,它为两个向量输出两个值(encoded_value_1
和 encoded_value_2
)。如果 encoded_value_1
的值优于 encoded_value_2
的值,我想创建一个等于 1 的布尔值。
为此,我通过 Lambda
层使用 greater
。然而,它会产生错误(见下文)。
import keras
from keras.backend import greater
from keras.layers import Input, LSTM, Dense, Lambda, concatenate
from keras.models import Model
value_1 = Input(shape=(4,))
value_2 = Input(shape=(4,))
shared_layer = Dense(1)
encoded_value_1 = shared_layer(value_1)
encoded_value_2 = shared_layer(value_2)
x = Lambda(greater,output_shape=(1,))((encoded_value_1,encoded_value_2))
model = Model(inputs=[value_1, value_2], outputs=x)
model.compile(optimizer='adam',loss='binary_crossentropy', metrics='accuracy'])
注意:我也试过连接两层,我有同样的错误。
merged_vector = concatenate([encoded_value_1, encoded_value_2], axis=-1)
x = Lambda(greater,output_shape=(1,))((merged_vector[0],merged_vector[1]))
ValueError: Layer lambda_4 was called with an input that isn't a symbolic tensor. Received type: . Full input: [(, )]. All inputs to the layer should be tensors.
有三点:
当
Lambda
层有多个输入时,输入必须作为张量列表传递,而不是元组。greater
的输出是一个 bool 张量,您需要将其转换为浮点数以对其进行计算。greater
接受两个输入,因此您需要将其包装在 pythonlambda
函数中以便能够在Lambda
Keras 中的图层。
因此,我们将有:
from keras import backend as K
# ...
x = Lambda(lambda z: K.cast(K.greater(z[0], z[1]), K.floatx()),output_shape=(1,))([encoded_value_1,encoded_value_2])
也不要忘记 metrics
参数缺少的左括号:
..., metrics=['accuracy'])
^
|
|
missing!