2017-09-13 43 views
-1

我有一個物理問題:構建一個產品10個輸出參數(寬度,長度,材料等)是根據10個輸入參數(性能,溫度,容量,等等..)。輸出參數顯然取決於輸入參數。但我不知道如何。例如,輸出參數O1可以依賴於輸入參數I1,I2和I3。10個輸入和10個輸出的神經網絡

我已經得到了可以說他們的輸入/輸出參數30k產品的數據。該數據庫是這樣的:

---------------------------------------------- 
| Product| I1 | I2 | I3 | ... | O1 | O2 | 03 | 
---------------------------------------------- 
| Prod A | 1.2| 2.3| 4.2| ... | 5.3| 6.2| 1.2| 
---------------------------------------------- 
| Prod B | 2.3| 4.1| 1.2| ... | 8.2| 5.2| 5.0| 
---------------------------------------------- 
| Prod C | 6.3| 3.7| 9.1| ... | 3.1| 4.1| 7.7| 
---------------------------------------------- 
| ... |         | 
---------------------------------------------- 

所以我需要做的是找到輸出中的參數基於輸入參數I 1 O 1-O 10 - 10我

首先問:如果我知道它是正確的,這是一個迴歸問題,基於一些輸入值,我想找到一些輸出值(在數據中有一個函數/形式來確定正確的值)。它是否正確?

我的想法是用/訓練神經網絡(使用keras和tensorflow作爲後端)

如何將這種神經網絡是什麼樣子?最佳做法是什麼?

這是我到目前爲止: 輸入層有10個輸入,兩個完全連接的深層有100個神經元和一個有10個輸出的層。在此keras看起來是這樣的:

def baseline_model(self, callback): 
    model = Sequential() 
    model.add(Dense(100, input_dim=10, activation="relu")) 
    model.add(Dense(100, activation="relu")) 
    model.add(Dense(10)) 

    model.compile(loss='mean_squared_error', optimizer='adam', metrics=["accuracy"]) 
    model.fit(input_train, output_train, batch_size=5, epochs=2000, verbose=2, callbacks=[callback], shuffle=True, validation_data=(input_val,output_val)) 

    scores = model.evaluate(input_val, output_val, verbose=1) 
    print("Scores:",scores) 

當然的模型不能正常工作像預期的,這就是爲什麼我要求幫助...培訓failes:

Epoch 1999/2000 
7s - loss: 47634520366153.6016 - acc: 0.0000e+00 - val_loss: 9585392308285.4395 - val_acc: 0.0000e+00 

任何建議什麼我應該改變?我想過使用「sigmoid」作爲激活並將數據規範化爲[0,1]。

感謝您的任何意見

回答

2

如果我得到它的權利,這是一個迴歸問題的基礎上,我想找到一些輸出值的一些輸入值

是的,我認爲你是對。

這樣的神經元網絡是怎麼樣的?最佳做法是什麼?

這是非常寬泛的問題。我認爲你應該把你的數據分解成火車和驗證集,從最簡單的網絡開始(也許沒有隱藏層或者只有一個隱藏層),然後讓它越來越複雜(增加更多層和隱藏單元),同時你的有效錯誤減少。當網絡變得相當深時,在密集層之間添加批量標準化層是個好主意。您也可以查看剩餘連接,但不確定是否真的需要這個。

任何建議我應該改變什麼?我想過使用「sigmoid」作爲激活並將數據規範化爲[0,1]。

  • 激活函數類型取決於您的輸出類型。對於分類輸出sigmoid/softmax可能是很好的選擇,線性應該可以用於浮點數。
  • 此外,如果您的輸入之一是分類(例如材料類型),最好將其分成幾個二進制輸入。
  • 標準化您的輸入和輸出幾乎總是個好主意。非標準化的數據可能真的會傷害訓練過程。
  • 繪製錯誤並檢查它在時間內的變化。 loss: 47634520366153.6016真的很大,但它告訴我們沒有太多關於優化。如果減少,也許你可以提高學習率。如果它增長嘗試降低學習率或嘗試其他優化算法。
  • 檢查您的漸變,如果它太大,嘗試使用漸變剪裁。
  • 也嘗試從簡單的模型開始。可能來自線性迴歸。

強烈來講神經neutwork調試大而複雜的領域,我不知道,它是適合於計算器討論

PS對不起,我的英語

1

正如@Dark_davier已經說過,這是一個你需要一些經驗的領域。如果沒有真正做一些測試,真的不可能回答。但是,作爲指南要小心你的網絡的大小。在你的網絡中,你有大概(更多)10e4參數,並且你說你只有「30k個觀察值」。所以過度配合的可能性很高...所以你需要小心。您需要使用更復雜的技術來避免它(首先進行交叉驗證以檢查,然後進行正規化)。但是這需要NN優化的一些經驗...