2017-03-11 12 views
1

私はケラスの私のモデルが私の入出力データを取り込まない理由を理解しようとしていますか?なぜケラスは私の入力を受け取りませんか?

入力データは、shape(15,1,3)のnumpy.ndarraysのリストで構成され、出力は各エントリに1つの数字だけを持つnumpy.arraysのリストです。ここで

である私は私のモデルを作成し、で物事を渡し場所:出力

 model = Sequential() 

     print "Data-train-in: " + str(data_train_input[0].shape) 
     print "Data-train-out: " + str(data_train_output[0].shape) 
     print "Data-test-in: " + str(data_test_input[0].shape) 
     #sys.exit() 

     print "Model Definition" 
     print "Row: " + str(row) 
     model.add(Convolution2D(64,3,3,input_shape=(3,row,1))) 
     print model.output_shape 
     model.add(Convolution2D(32,1,3)) 
     print model.output_shape 
     model.add(MaxPooling2D((1,1))) 
     print model.output_shape 
     model.add(Flatten()) 
     print model.output_shape 
     model.add(Dense(1,activation='relu')) 
     print model.output_shape 


     model.compile(loss='mean_squared_error', optimizer="sgd") 

     reduce_lr=ReduceLROnPlateau(monitor='val_loss', factor=0.01, patience=3, verbose=1, mode='auto', epsilon=0.0001, cooldown=0, min_lr=0.000000000000000001) 
     stop = EarlyStopping(monitor='val_loss', min_delta=0, patience=5, verbose=1, mode='auto') 

     log=csv_logger = CSVLogger('training_'+str(i)+'.csv') 
     print "Model Train" 
     hist_current = model.fit(data_train_input, 
          data_train_output, 
          shuffle=False, 
          validation_data=(data_test_input,data_test_output), 
          validation_split=0.1, 
          nb_epoch=150, 
          verbose=1, 
          callbacks=[reduce_lr,log,stop]) 

:私は、出力メッセージをどのように解釈すべきかについて確認していない

Data-train-in: (15, 1, 3) 
Data-train-out:() 
Data-test-in: (15, 1, 3) 
Model Definition 
Row: 15 
(None, 1, 13, 64) 
(None, 1, 11, 32) 
(None, 1, 11, 32) 
(None, 352) 
(None, 1) 
Model Train 
Traceback (most recent call last): 
    File "keras_convolutional_feature_extraction.py", line 502, in <module> 
    model(0,train_input_data,output_data_train,test_input_data,output_data_test) 
    File "keras_convolutional_feature_extraction.py", line 496, in model 
    callbacks=[reduce_lr,log,stop]) 
    File "/usr/local/lib/python2.7/dist-packages/keras/models.py", line 652, in fit 
    sample_weight=sample_weight) 
    File "/usr/local/lib/python2.7/dist-packages/keras/engine/training.py", line 1038, in fit 
    batch_size=batch_size) 
    File "/usr/local/lib/python2.7/dist-packages/keras/engine/training.py", line 963, in _standardize_user_data 
    exception_prefix='model input') 
    File "/usr/local/lib/python2.7/dist-packages/keras/engine/training.py", line 54, in standardize_input_data 
    '...') 
Exception: Error when checking model input: the list of Numpy arrays that you are passing to your model is not the size the model expected. Expected to see 1 arrays but instead got the following list of 260182 arrays: [array([[[ 67, 255, 180]], 

     [[ 68, 255, 178]], 

     [[ 68, 255, 178]], 

     [[ 67, 255, 180]], 

     [[ 43, 254, 204]], 

     [[ 19, 253, 228]], 

     [[ 9, 205, 241]], 

     [[ ... 

...ここで何が間違っていますか?

+1

'data_train_input'はリストだと思います。次のコマンドの出力を 'print data_train_input.shape'にポストしてください。私はこれがリストであればエラーになると思う。もしそうなら、あなたは 'data_train_input = np.array(data_train_input)'を実行することによって 'data_train_input'を配列に変換する必要があります。 –

答えて

1

あなたのデータは入力層と一致しません。あなたのモデルではinput_shape=(3,row,1)を使用しました。これはinput_shape=(3,15,1)となります。 あなたのプリントには、トレーニングの例が異なる形の(15, 1, 3)であることが示されています。

入力定義をinput_shape=(row,1,3)に変更してください。 問題を解決するもう1つの方法は、データを入力レイヤシェイプに再シェイプすることです。

関連する問題