2017-12-03 192 views
2

我有句子嵌入尺寸为2*1*300的句对的输出X.我想把这个输出分成两个形状为1*300的向量来计算它的绝对差值和乘积。 Keras在分割图层输出时抛出`'张量'对象没有属性'_keras_shape'

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的张量对象。

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

+0

嗨,我试图通过完成它我自己来运行你的代码,但无法获得你所得到的错误...您可以发布完整的代码? –

+0

编译模型时出错。下面的答案解决了它。谢谢 :) – Aarthi

回答

0

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) 
相关问题