2017-12-03 32 views
2

文のサイズが2*1*300の文の埋め込み出力Xがあります。この出力を形状の2つのベクトルに分割して絶対差と積を計算したいと思います。 レイヤー出力を分割するときにKerasは `'Tensor 'オブジェクトに属性' _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はレイヤーで処理されるときにテンソルにいくつかの情報を追加します。あなたはテンソルをレイヤーの外に分割しているので、その情報を失います。

ソリューションは、ラムダ層から分割テンソルを返す必要:

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) 
関連する問題