Pytorch(7)-自己设计神经网络会遇到的问题

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自适应地为各个参数分配不同学习率的算法。更新公式:
w t + 1 = w t + η g t ∑ i = 0 t g i w^{t+1}=w^t+\eta \frac{g^t}{\sqrt{\sum_{i=0}^tg^i}} wt+1=wt+ηi=0tgi 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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值