2017-03-20 61 views
3

我對機器學習很陌生,最近我開始學習如何使用庫Keras實現基本的Python神經網絡。Keras:用aray作爲輸入進行訓練

我從一個基本例子開始(訓練一個網絡,以便它可以預測值y = f(x)= x)。

model = Sequential() 
model.add(Dense(10, input_dim=1, activation='relu')) 
model.add(Dense(10, activation='relu')) 
model.add(Dense(10, activation='relu')) 
model.add(Dense(1)) 
model.compile(loss='mse', optimizer='adam') 
data = np.array([x for x in range(0,1000)]) 

for i in range(0, 1000): 
    model.fit([np.array([data[i]]), np.array([data[i]]), nb_epoch=1, batch_size=1, verbose=0) 

現在我想申請一個類似的算法來的整數升的列表列車內的網絡的話,它會回到我的函數f的三個值(基本的列表:[F(L,0) ,f(L,1),f(L,2)])。所以這次的輸入是一個由5個整數組成的數組,並且所需的返回輸出是一個3個浮點數的列表。

但是,我沒有設法正確編寫for循環中的fit方法,我收到一條錯誤消息:「預計會看到1個數組,但是會得到以下2個數組的列表:...」。我試圖玩弄一些密集構造函數(input_dim,input_shape,input_size)的參數,但我似乎仍然無法使其工作...

所以基本上,沒有人知道如何正確實施將數組作爲輸入並返回不同長度的數組的網絡?

非常感謝您的幫助和支持,

- SMGR

+0

總數我不明白你正在嘗試做的。請先學習神經網絡才能使用Keras。如果你有兩個輸入維度,你的數據應該是'(batch_size,2)'形式。你不需要遍歷'fit'。你可以使用'nb_epoch'參數。這個問題和你的動機對我來說是非常不清楚的。所以我無法有效回答這個問題。 –

+0

謝謝你的回答。我將盡量做到更精確... 我打算使用神經網絡進行一些Q學習。因此,我的網絡輸入是一個狀態s(由5個整數數組描述),結果是一個值爲Q(s,a)的數組,其中a可以取三個值(0,1或2)。 事情是,我沒有設法編譯我的模型與數組作爲輸入(與我顯示的代碼相比,我的網絡只使用一個整數作爲輸入的代碼),代碼返回一個關於它的大小的錯誤顯然。 – smgr

+0

我可以做的是指向你[這裏](https://github.com/farizrahman4u/qlearning4k)。 –

回答

1

如果你的最終輸出有3個維度的最後密集層有3列。

您與

model.add(Dense(3)) 

這樣做如果你的輸入有5個維度的第一個密集矩陣將有5行。

這是用input_dim參數在你的第一個密集層。

model.add(Dense(10, input_dim=2, activation='relu')) 

您現在可以看到第一個緻密層矩陣是2行乘10列矩陣。由於下一個矩陣必須有10行(以便維度匹配),因此在下一個圖層中,您只需定義列數。因此,您將單個維度參數傳遞給每個後續圖層。

由於這是一個迴歸問題,因此使用'mse'作爲損失應該可行(正如您正確選擇的那樣)。

你在這種情況下數據集應該是兩個矩陣:

  • 輸入矩陣與輸入採樣(每個屬性一列,所以5列)。 N乘5矩陣
  • 輸出矩陣與輸出樣本(每個屬性一列,所以3列)。 ×3矩陣

在這兩種情況下,N,你就應該有行數是相同的:樣品N.

+1

非常感謝您的詳細解釋!我的代碼仍然有一些小錯誤需要修復,但這部分現在已經完全運作了,非常感謝。 – smgr

相關問題