Keras抛出'' Tensor'在分割图层输出时,对象没有属性' _keras_shape'`

时间:2017-12-03 08:21:28

标签: python tensorflow keras word-embedding sentence-similarity

我有句子嵌入维度2*1*300的句子对的输出X.我想将此输出拆分为两个形状为1*300的向量,以计算其绝对差异和乘积。

x = MaxPooling2D(pool_size=(1,MAX_SEQUENCE_LENGTH),strides=(1,1))(x)
x_A = Reshape((1,EMBEDDING_DIM))(x[:,0])
x_B = Reshape((1,EMBEDDING_DIM))(x[:,1])

diff = keras.layers.Subtract()([x_A, x_B])
prod = keras.layers.Multiply()([x_A, x_B])


nn = keras.layers.Concatenate()([diff, prod])

目前,当我执行x[:,0]时,会抛出错误AttributeError: 'Tensor' object has no attribute '_keras_shape'。我假设张量对象分裂的结果是张量对象,它没有_keras_shape

有人可以帮我解决这个问题吗?感谢。

1 个答案:

答案 0 :(得分:1)

Keras在分层处理时为张量添加了一些信息。由于你在层外分裂张量,它就会丢失这些信息。

解决方案涉及从Lambda图层返回分割张量:

x_A = Lambda(lambda x: x[:,0], output_shape=notNecessaryWithTensorflow)(x)
x_B = Lambda(lambda x: x[:,1], output_shape=notNecessaryWithTensorflow)(x)
x_A = Reshape((1,EMBEDDING_DIM))(x_A)
x_B = Reshape((1,EMBEDDING_DIM))(x_B)