2016-06-13 41 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)ç

錯誤是:

錯誤時檢查模型對象:預期activation_42具有形狀 (無,12),但具有形狀得到了陣列(2369,1)

model.add(Dense(in_out_neurons)) 

如何改變Dense,使其工作:在行中出現的錯誤?

另一個問題是如何添加一個簡單的自動編碼器來初始化ANN的權重?

回答

4

你的問題之一是你似乎誤解了一個批次是什麼。 批處理是一次計算的訓練樣本數,因此您一次不得使用X_train中的一個訓練樣本,例如每次使用100個訓練樣本。這裏重要的一點是,這與你的模型無關。

所以,當你寫

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

然後創建一個批次的輸出尺寸完全連接層。這沒有什麼意義。

另一個問題是,你的模型的輸出是12個神經元,而你的Y只是一個值/神經元。您的模型看起來是這樣的:

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

那麼什麼fit()所做的是,它輸入形狀(128, 12)(batch size, X_train.shape[1]))的矩陣到模型,並嘗試塑造(128,12)的輸出從最後一層比較相應Y值的批次(形狀(128,1))。

相關問題