2 回答

TA貢獻1878條經驗 獲得超4個贊
您犯了一個非?;镜腻e誤:由于您處于回歸設置中,因此您不應在最后一層使用sigmoid
激活(這用于二元分類情況);將最后一層更改為
model.add(Dense(1,activation='linear'))
甚至
model.add(Dense(1))
因為,根據文檔,如果您不指定activation
參數,則默認為linear
.
其他答案中已經提供了各種其他建議,并且評論可能很有用(較低的 LR、更多層、其他優化器,例如Adam
),您當然需要增加批量大小;但是sigmoid
您當前用于最后一層的激活功能將無法使用。
與問題無關,但在回歸設置中,您不需要將損失函數作為指標重復;這個
model.compile(loss='mse', optimizer='sgd')

TA貢獻1909條經驗 獲得超7個贊
如果您可以在整個訓練過程中發布損失和 MSE(訓練和驗證/測試集)的進展,那將非常有用。更好的是,如果您可以按照https://machinelearningmastery.com/display-deep-learning-model-training-history-in-keras/將其可視化并在此處發布可視化,那將是最好的。
同時,根據事實:1)您說損失沒有減少(我假設在訓練集上,在訓練期間,根據您的編譯參數)。2)您說您的測試集上的預測“準確性”很差。3)我的經驗/直覺(不是經驗評估)告訴我,你的兩層密集模型太小了,無法捕捉數據中固有的復雜性。AKA 你的模型偏差過高https://towardsdatascience.com/understanding-the-bias-variance-tradeoff-165e6942b229
您可以嘗試的最快和最簡單的方法是嘗試向每一層添加更多層和更多節點。
但是,我應該注意到,除了兩個坐標之間的距離之外,還有很多因果信息會影響行駛距離和行駛時間,這可能是您的神經網絡最容易提取的特征。例如,無論您是在高速公路上行駛還是在小樹林、交通信號燈上行駛,無論道路是曲折還是直行……僅從數據中就可以推斷出所有這些,您將需要大量數據(示例)在我的觀點。如果您可以添加輸入列,例如從兩個點到最近的高速公路的距離,您也許可以用更少的數據進行訓練
我還建議您仔細檢查您是否輸入了您認為輸入的內容(及其形狀),并且您應該使用函數sklearn的一些標準化,這可能有助于模型更快地學習并更快地收斂到更高“準確性”。
如果以及當您發布更多代碼或培訓歷史時,我可以為您提供更多幫助(以及多少培訓樣本)。
編輯1:batch_size=32
如果它適合您的記憶, 最好嘗試將批量大小更改為更大的數字。當使用像圖像這樣的“信息豐富”輸入時,您可以使用小批量大?。ɡ?1),但是當使用像 4 個浮點數(2 個坐標)這樣非?!靶畔⒇毞Α钡臄祿r,漸變將指向每個批次( with batch_size=1
) 到一個幾乎隨機的(偽...)方向,而不一定更接近局部最小值。只有在對較大批次(例如 32 個,甚至更多)的集體損失進行梯度計算時,您才會得到一個至少近似指向局部最小值方向的梯度,并收斂到更好的結果。另外,我建議你不要手動弄亂學習率,也許改用像“adam”或“RMSProp”這樣的優化器。
編輯 2:@Desertnaut 提出了一個很好的觀點,我完全錯過了,沒有它的更正,你的代碼將無法正常工作。他應得的榮譽,所以我不會在這里包括它。請參考他的回答。另外,不要忘記提高批量大小,不要“手動弄亂”你的學習率,例如“adam”會為你做這件事。
添加回答
舉報