pytorch调参经验汇总
目录
关于train loss 降低不下去
第一步简单的:更换各种参数
例如,lr, weight_decay, batch, loss_fun, optim_fun
看看会不会有有效果的。
学习率非常重要的参数
|
|
batch过大不一定是好事
太小的size可能会导致难以收敏。但是太大的bantch坑你会使得loss过于平均,抗干扰能力差,泛化能力不行。
如果没有,进一步思考。
是不是网络本身有效性有问题
一个简单的验证办法是,自己捏造一个肯定有用的数据集,然后将自己得网络放到自己的简单数据集上运行。
看能否学习出一个模型。
更换激活函数
不同的激活函数,对模型影响挺大,
Relu可以有效避免梯度消失。利于线性计算
分类用softmax。
是不是数据本身有问题
如果数据本身有问题,那么无论如何也训练不出什么东西。
查看是不是梯度消失了
查看梯度的代码
|
|
这个是个细致活。不好办。
适当降低模型的规模(2023-3-15遇到)
情况:
- 模型大部分时候没用,train loss基本降低不下去,偶尔用SGD,参数对了。运气好的话有那么一点点的效果。
尝试:
- 猜测是模型一开始的初始化的参数空间不行。参数空间太大了,导致很容易陷入局部最优,训练不出任何东西。
- 尝试降低模型隐藏层数,降低模型隐藏层的节点数目。work!解决了。
valid loss 降低不下去
如果过拟合,就正则化。
适当降低模型的规模
模型复杂度太高,会导致模型容易学到噪声。
关于torch的显存机制
需要放入显存的并不是只有模型和数据。
|
|
所以在运行中,进程所占用的显存是会有一定波动的。所以最好不要一次性直接放满,不然可能导致会运行着突然溢出了。最好流出一定的显存给中间参数。
ref
https://blog.ailemon.net/2019/02/26/solution-to-loss-doesnt-drop-in-nn-train/