Pytorch(7)-自己设计神经网络会遇到的问题
操作pytorch架構(gòu)遇到的問題
- 1.網(wǎng)絡(luò)參數(shù)初始化
- 2.查看當(dāng)前可學(xué)習(xí)參數(shù)
- 3.增加可學(xué)習(xí)的參數(shù)
- 4.參數(shù)優(yōu)化函數(shù)Adagrad
- 5.直接修改網(wǎng)絡(luò)梯度值
- 6.optimizers.zero_grad()報錯
- 7.tensor.detach() 和 tensor.data 的區(qū)別
1.網(wǎng)絡(luò)參數(shù)初始化
在pytorch中,有自己默認(rèn)初始化參數(shù)方式,所以定義好網(wǎng)絡(luò)以后,沒有特殊需求,不需要顯式進(jìn)行初始化操作。也可調(diào)用內(nèi)置特定初始化函數(shù),詳見:https://blog.csdn.net/VictoriaW/article/details/72872036
也可以自定義初始化方式,詳見:https://blog.csdn.net/qq_36338754/article/details/97756378
類神經(jīng)網(wǎng)絡(luò)層 Vs 函數(shù)神經(jīng)網(wǎng)絡(luò)層:https://blog.csdn.net/victoriaw/article/details/72869680
2.查看當(dāng)前可學(xué)習(xí)參數(shù)
函數(shù)查看現(xiàn)在的全部可訓(xùn)練參數(shù),定義網(wǎng)絡(luò)net之后查看.state_dict()屬性
net.state_dict()
或者
net.named_parameters()
3.增加可學(xué)習(xí)的參數(shù)
在網(wǎng)絡(luò)初始化函數(shù)中添加nn.Parameter類型變量,即可以實現(xiàn):增加額外的可學(xué)習(xí)參數(shù)的操作。
self.coefficient = torch.nn.Parameter(torch.Tensor([1.55]))
參考資料:https://blog.csdn.net/qq_19672579/article/details/79195568
4.參數(shù)優(yōu)化函數(shù)Adagrad
Adagrad是解決不同參數(shù)應(yīng)該使用不同的更新速率的問題。Adagrad自適應(yīng)地為各個參數(shù)分配不同學(xué)習(xí)率的算法。更新公式:
wt+1=wt+ηgt∑i=0tgiw^{t+1}=w^t+\eta \frac{g^t}{\sqrt{\sum_{i=0}^tg^i}}wt+1=wt+η∑i=0t?gi?gt?
隨著更新次數(shù)增加,更新越來越慢。
參考資料:https://www.jianshu.com/p/a8637d1bb3fc
5.直接修改網(wǎng)絡(luò)梯度值
A.grad=num
num 為tensor 類型
6.optimizers.zero_grad()報錯
Traceback (most recent call last):
File “/home/pp/.local/share/umake/ide/pycharm-professional/helpers/pydev/pydevd.py”, line 1758, in
main()
File “/home/pp/.local/share/umake/ide/pycharm-professional/helpers/pydev/pydevd.py”, line 1752, in main
globals = debugger.run(setup[‘file’], None, None, is_module)
File “/home/pp/.local/share/umake/ide/pycharm-professional/helpers/pydev/pydevd.py”, line 1147, in run
pydev_imports.execfile(file, globals, locals) # execute the script
File "/home/pp/.local/share/umake/ide/pycharm-professional/helpers/pydev/_pydev_imps/pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, ‘exec’), glob, loc)
File “/home/pp/PycharmProjects/Stein-Variational-Gradient-Descent-master/python/cyy_bayesian_nn_1.py”, line 296, in
svgd = svgd_bayesnn(X_train, y_train, batch_size=batch_size, n_hidden=n_hidden, max_iter=max_iter)
File “/home/pp/PycharmProjects/Stein-Variational-Gradient-Descent-master/python/cyy_bayesian_nn_1.py”, line 127, in init
optimizer.zero_grad()
File “/home/pp/anaconda3/envs/py36_torch/lib/python3.6/site-packages/torch/optim/optimizer.py”, line 163, in zero_grad
p.grad.detach()
RuntimeError: Can’t detach views in-place. Use detach() instead
解決嘗試:變換optimizer.zero_grad()的位置,沒用,手動置0 吧.
A.grad.zero_()
參考資料:https://blog.csdn.net/a19990412/article/details/85247465
7.tensor.detach() 和 tensor.data 的區(qū)別
x .data 返回和 x 的相同數(shù)據(jù) tensor, 但不會加入到x的計算歷史里,且require s_grad = False, 這樣有些時候是不安全的, 因為 x.data 不能被 autograd 追蹤求微分 。
x.detach() 返回相同數(shù)據(jù)的 tensor ,且 requires_grad=False ,但能通過 in-place 操作報告給 autograd 在進(jìn)行反向傳播的時候。
參考資料:https://blog.csdn.net/DreamHome_S/article/details/85259533
總結(jié)
以上是生活随笔為你收集整理的Pytorch(7)-自己设计神经网络会遇到的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 算法(4)-leetcode-explo
- 下一篇: 算法(22)-leetcode-剑指of