亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Keras 神經網絡為所有輸入預測相同的數字

Keras 神經網絡為所有輸入預測相同的數字

一只甜甜圈 2022-07-19 20:31:57
我正在嘗試創建一個 keras 神經網絡來預測城市兩點之間的道路距離。我正在使用谷歌地圖來獲取旅行距離,然后訓練神經網絡來做到這一點。import pandas as pdarr=[]for i in range(0,100):    arr.append(generateTwoPoints(55.901819,37.344735,55.589537,37.832254))    df=pd.DataFrame(arr,columns=['p1Lat','p1Lon','p2Lat','p2Lon', 'distnaceInMeters', 'timeInSeconds'])print(df)神經網絡架構:from keras.optimizers import SGDsgd = SGD(lr=0.00000001)from keras.models import Sequentialfrom keras.layers import Dense, Activationmodel = Sequential()model.add(Dense(100, input_dim=4 , activation='relu'))model.add(Dense(100, activation='relu'))model.add(Dense(1,activation='sigmoid'))model.compile(loss='mse', optimizer='sgd', metrics=['mse'])然后我分集進行測試/訓練Xtrain=train[['p1Lat','p1Lon','p2Lat','p2Lon']]/100Ytrain=train[['distnaceInMeters']]/100000Xtest=test[['p1Lat','p1Lon','p2Lat','p2Lon']]/100Ytest=test[['distnaceInMeters']]/100000然后我將數據擬合到模型中,但損失保持不變:history = model.fit(Xtrain, Ytrain,                    batch_size=1,                    epochs=1000,                    # We pass some validation for                    # monitoring validation loss and metrics                    # at the end of each epoch                    validation_data=(Xtest, Ytest))我稍后打印數據:prediction = model.predict(Xtest)print(prediction)print (Ytest)但是所有輸入的結果都是相同的:[[0.26150784] [0.26171574] [0.2617755 ] [0.2615582 ] [0.26173398] [0.26166356] [0.26185763] [0.26188275] [0.2614446 ] [0.2616575 ] [0.26175532] [0.2615183 ] [0.2618127 ]]    distnaceInMeters2            0.135956            0.279987            0.4884916           0.3655321           0.3791022           0.4017633           0.0917339           0.2454253           0.0421655           0.3821262           0.3997264           0.2915387           0.08788我找不到問題。它是什么?我是機器學習的新手。
查看完整描述

2 回答

?
UYOU

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')


查看完整回答
反對 回復 2022-07-19
?
jeck貓

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”會為你做這件事。


查看完整回答
反對 回復 2022-07-19
  • 2 回答
  • 0 關注
  • 105 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號