2017-02-20 8 views
1

で、互換性のないエラーを取得:Keras:ValueErrorを:入力0私はバックエンドとしてTensorflowでKerasを使用しています互換性のない層の問題

model = Sequential() 
model.add(LSTM(64, input_dim = 1)) 
model.add(Dropout(0.2)) 
model.add(LSTM(16)) 

次のエラーが表示さ:

Traceback (most recent call last): 
    File "train_lstm_model.py", line 36, in <module> 
    model.add(LSTM(16)) 
    File "/home/***/anaconda2/lib/python2.7/site-packages/keras/models.py", line 332, in add 
    output_tensor = layer(self.outputs[0]) 
    File "/home/***/anaconda2/lib/python2.7/site-packages/keras/engine/topology.py", line 529, in __call__ 
    self.assert_input_compatibility(x) 
    File "/home/***/anaconda2/lib/python2.7/site-packages/keras/engine/topology.py", line 469, in assert_input_compatibility 
    str(K.ndim(x))) 
ValueError: Input 0 is incompatible with layer lstm_2: expected ndim=3, found ndim=2 

私はこれをどのように修正することができます問題?

Kerasバージョン:1.2.2 Tensorflowバージョン:0.12

答えて

1

LSTM層​​の形で入力を受け付けています。あなたが提供した入力形状は1-dimなので、どこからエラーが来るのですか。エラーメッセージの正確な形式は、データの実際の形状にbatch_sizeが含まれているという事実から来ています。したがって、レイヤーに供給されるデータの実際の形状は(batch_size, len_of_sequences, nb_of_features)です。あなたの形は(batch_size, 1)です。これが3d2dの入力の後ろにある理由です。

さらに、2番目のレイヤーに似た問題があるかもしれません。

model.add(LSTM(64, input_shape = (len_of_seq, nb_of_features), return_sequences=True) 

か::シーケンスを返すようにLSTM層を作るために、あなたは、その定義に変更する必要があり

model.add(LSTM(64, input_dim = nb_of_features, input_len = len_of_sequence, return_sequences=True) 
+0

私はそれだけで 'input_dim'だけでは、コンディショニングを設定することによって動作することを確認しています'return_sequences'をTrueに設定します。なぜ私は 'return_sequences'を設定しなければならないのか教えてください。 –

+0

出力が再帰的なネットワークに供給されるたびに、return_srquencesをTrueに設定する必要があります。それはあなたの層が計算の全シーケンスを出力するようにします。 falseに設定すると、1次元ベクトルが返されます(デフォルトでは、シーケンスの最後の出力に設定されます)。 –

+0

私の答えは正しいか間違っていますか? –

関連する問題