操作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=0tgigt
随着更新次数增加,更新越来越慢。
参考资料: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