2017-06-12 22 views
0

私はケラの初心者です。ニューラルネットワークでデータを分類しようとしています。ニューラルネットワークの入力形状誤差

x_train = x_train.reshape(1,x_train.shape[0],window,5) 
    x_val = x_val.reshape(1,x_val.shape[0],window,5) 

    x_train = x_train.astype('float32') 
    x_val = x_val.astype('float32') 

    model = Sequential() 

    model.add(Dense(64,activation='relu',input_shape= (data_dim,window,5))) 
    model.add(Dropout(0.5)) 

    model.add(Dense(64,activation='relu')) 
    model.add(Dropout(0.5)) 
    model.add(Dense(2,activation='softmax')) 

    model.compile(loss='categorical_crossentropy', 
      optimizer='sgd', 
      metrics=['accuracy']) 

    weights = model.get_weights() 


    model_info = model.fit(x_train, y_train,batch_size=batchsize, nb_epoch=15,verbose=1,validation_data=(x_val, y_val)) 

    print x_train.shape 
    #(1,1600,45,5) 

    print y_train.shape 
    #(1600,2) 

私はいつもこのスクリプトでこのエラーを持っていると私は理由を理解していない:

ValueError: Error when checking target: expected dense_3 to have 4 dimensions, but got array with shape (16000, 2) 
+0

完全な例外トレースを提供できますか?バグ修正に役立ちます。 –

+0

私はplot_modelを使うことができません。既にpythonをインストールしていても、pydotをインポートできないことをPythonが教えてくれます。 –

答えて

2

をお使いのモデルの出力(それは第三緻密層であるため、そのように呼ばdense_3は、)4つの寸法を有します。しかし、それを比較しようとしているラベル(y_train)は2つの次元に過ぎません。モデルがラベルと一致するようにデータを再構成するように、ネットワークのアーキテクチャを変更する必要があります。

テンソルの形状を把握するのは難しいので、model.fitを呼び出す前にplot_model(model, to_file='model.png', show_shapes=True)に電話することをおすすめします。結果のPNGを見れば、レイヤーがデータの形状にどのような影響を与えているのかを知ることができます。

+0

ありがとう、x_trainの形を変えなければなりませんか? –

+0

print(model.summary())を使用して、モデルレイヤの寸法を確認します。このモデル構造とx_train.shapeを使用すると、y_train.shapeを取得できなくなります。 x_trainの形状を変更するか、モデル構造を変更します。 –

+0

@ coline.sいいえ、y_trainの形。 –