2016-06-13 9 views
2

データのシンプルなシーケンスを作成する方法を少し誤解します。kerasライブラリを使用して密集度を指定する

データがある次の寸法:

X_train.shape 
(2369, 12) 

y_train.shape 
(2369,) 

X_test.shape 
(592, 12) 

y_test.shape 
(592,) 

これは私がモデルを作成する方法である:

batch_size = 128 
nb_epoch = 20 
in_out_neurons = X_train.shape[1] 
dimof_middle = 100 

model = Sequential() 
model.add(Dense(batch_size, batch_input_shape=(None, in_out_neurons))) 
model.add(Activation('relu')) 
model.add(Dropout(0.2)) 
model.add(Dense(batch_size)) 
model.add(Activation('relu')) 
model.add(Dropout(0.2)) 
model.add(Dense(in_out_neurons)) 
model.add(Activation('linear')) 

# I am solving the regression problem, not the classification one 
model.compile(loss="mean_squared_error", optimizer="rmsprop") 

history = model.fit(X_train, y_train, 
        batch_size=batch_size, nb_epoch=nb_epoch, 
        verbose=1, validation_data=(X_test, y_test)) 

エラーメッセージ:

例外:モデル入力エラーチェック:予想されるdense_input_14〜 は形状(なし、1)を持っていますが、形状(2369,12)の配列を持っていますç

エラーは次のとおりです。この

(1、2369)形状 (なし、12)を有することが期待さactivation_42が、形状を持つ配列を得た:モデル標的をチェック

エラー

model.add(Dense(in_out_neurons)) 

どのようにそれを動作させるためにDenseを変更するには:行目でエラーが発生しますか?

もう1つの質問は、ANNの重みを初期化するための簡単な自動エンコーダーの追加方法です。

答えて

4

あなたの問題の1つは、バッチが何であるか誤解しているようです。 バッチは一度に計算されたトレーニングサンプルの数です。したがって、一度に1つのトレーニングサンプルをX_trainから一度に計算するのではなく、一度に100個使用します。ここで重要な点は、これはあなたのモデルとは関係がないことです。

あなたは

model.add(Dense(batch_size, batch_input_shape=(None, in_out_neurons))) 

を書くときに、あなたは1回分の出力サイズと完全に接続されたレイヤーを作成します。それは意味をなさない。

もう1つの問題は、Yが1つの値/ニューロンである間に、モデルの出力が12ニューロンであることです。その後fit()があるん何

| 
    v 
[128] 
[128] 
[ 12] 
    | 
    v 

、それがモデルに形状(128, 12)(batch size, X_train.shape[1]))の行列を入力し、対応するY値に最後の層から形状(128,12)の出力を比較しようとします。あなたのモデルは、このようになります。 (形状(128,1))。

関連する問題