操作pytorch架構遇到的問題
- 1.網絡參數初始化
- 2.查看當前可學習參數
- 3.增加可學習的參數
- 4.參數優化函數Adagrad
- 5.直接修改網絡梯度值
- 6.optimizers.zero_grad()報錯
- 7.tensor.detach() 和 tensor.data 的區別
1.網絡參數初始化
在pytorch中,有自己默認初始化參數方式,所以定義好網絡以后,沒有特殊需求,不需要顯式進行初始化操作。也可調用內置特定初始化函數,詳見:https://blog.csdn.net/VictoriaW/article/details/72872036
也可以自定義初始化方式,詳見:https://blog.csdn.net/qq_36338754/article/details/97756378
類神經網絡層 Vs 函數神經網絡層:https://blog.csdn.net/victoriaw/article/details/72869680
2.查看當前可學習參數
函數查看現在的全部可訓練參數,定義網絡net之后查看.state_dict()屬性
net.state_dict()
或者
net.named_parameters()
3.增加可學習的參數
在網絡初始化函數中添加nn.Parameter類型變量,即可以實現:增加額外的可學習參數的操作。
self.coefficient = torch.nn.Parameter(torch.Tensor([1.55]))
參考資料:https://blog.csdn.net/qq_19672579/article/details/79195568
4.參數優化函數Adagrad
Adagrad是解決不同參數應該使用不同的更新速率的問題。Adagrad自適應地為各個參數分配不同學習率的算法。更新公式:
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?
隨著更新次數增加,更新越來越慢。
參考資料:https://www.jianshu.com/p/a8637d1bb3fc
5.直接修改網絡梯度值
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 的區別
x .data 返回和 x 的相同數據 tensor, 但不會加入到x的計算歷史里,且require s_grad = False, 這樣有些時候是不安全的, 因為 x.data 不能被 autograd 追蹤求微分 。
x.detach() 返回相同數據的 tensor ,且 requires_grad=False ,但能通過 in-place 操作報告給 autograd 在進行反向傳播的時候。
參考資料:https://blog.csdn.net/DreamHome_S/article/details/85259533