2017-09-08 7 views
0

私はこの畳み込みニューラルネットワークを訓練しようとしていますが、 。モデルターゲットをチェックする際にエラーが発生しました:dense_39が3次元であると予想されましたが、形状(940,1)の配列を持っていました

model = Sequential() 
model.add(Conv1D(50, kernel_size=(1), 
       activation='relu', 
       input_dim=50)) 
model.add(Dense(32)) 
model.add(Dense(1)) 
model.summary() 
model.compile(loss=keras.losses.mean_squared_error, 
       optimizer=keras.optimizers.adam()) 

model.fit(X_train, y_train, 
      batch_size=940, 
      epochs=10, 
      verbose=1, 
      validation_data=(X_test, y_test)) 

モデル:私は問題は最後の層のために、私は一つだけの出力ノードを得たことである疑いがあるので、

ValueError: Error when checking model target: expected dense_39 to have 3 dimensions, but got array with shape (940, 1)

_________________________________________________________________ 
Layer (type)     Output Shape    Param # 
================================================================= 
conv1d_26 (Conv1D)   (None, None, 50)   2550  
_________________________________________________________________ 
dense_38 (Dense)    (None, None, 32)   1632  
_________________________________________________________________ 
dense_39 (Dense)    (None, None, 1)   33   
================================================================= 
Total params: 4,215.0 
Trainable params: 4,215 
Non-trainable params: 0.0 
_________________________________________________________________ 

は、私は常に、次のエラーメッセージが表示されます出力寸法は2に減少する。

答えて

3

1D畳み込みは、入力を(BatchSize,length,channels)の形式で受け取ります。
Kerasはそれを(None,length,channels)と報告します。

したがって、それに応じてinput_shapeを渡す必要があります。

model.add(Conv1D(50, kernel_size=(1), 
      activation='relu', 
      input_shape=(50,1))) 

そして、あなたのX_train(NumberOfSamples, 50, 1)のような形をしている、ということになることを確認してください:あなたは、あなたのデータに一つだけのチャンネルを持っている場合は、としてそれを定義する必要があります。

これはテンソルの形状を出力します(NumberOfSamples,50,50) - 最初の50は入って来た長さであり、2番目の層はレイヤーで定義された50個のフィルターのものです。

その後、密度の高いレイヤーでは、2Dデータではなく、平坦化されたデータが必要になることがよくあります。

これまでのように使用することはできますが、余分な寸法を保持しているため、目的とは思われません。あなたは(私は推測している)、あなたは緻密層を使用する前に、データをフラット化する必要が最後に一つだけクラスを使用する場合は

:、

model.add(Flatten()) #this will transform (None, 50,50) into (None,2500) 
model.add(Dense(32)) 
model.add(Dense(1)) 

は、その後、あなたの出力が実際に形(None,1)を持っているであろうあなたと一致しますY_train (940,1)

関連する問題

 関連する問題