文章轉載於https://blog.csdn.net/one_six_mix/article/details/86367086
因爲遇到了同樣的問題,所以記錄一下
在縮小模型,採用半精度模型,參數,輸入數據時,發現adam算法有問題,而sgd沒有問題。採用方法如下鏈接:
這個老哥有相同問題https://www.cnblogs.com/yanxingang/p/10148712.html
以下爲轉載:
2019/5/5更新
pytorch 1.1 版本相比1.0版本,對 half 訓練優化了許多,nan發生的情況少了很多,現在應該可以日常使用 half 訓練了
使用Adam優化器時,加入參數eps=1e-4
optimizer1 = optim.Adam(model.parameters(), lr=1e-3, eps=1e-4)
pytorch 半精度浮點數表示的範圍比單精度的少很多
1.使網絡輸入 值域縮放到 [-1, 1] 或 [0, 1]
2.定義Adam優化器時,加入參數eps=1e-3
3.定義RMSprop優化器時,加入參數eps=1e-2
4.降低學習率
optimizer1 = optim.Adam(model.parameters(), lr=0.001, eps=1e-3)
optimizer2 = optim.RMSprop(model.parameters(), lr=0.001, eps=1e-2)