2017-12-03 150 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) 
相關問題