- 当你的模型有 Batch Normalization,初始化通常不需要操心,激活函数默认 Relu 即可(某引用数万的大佬说的)。一般顺序是 Conv - BN - Relu。如果没有 BN(很多任务上,BN降低训练难度,但是可能影响最终性能 ),试着要做一些数据归一化。
- 虽然有至少十种激活函数,但初期用 Relu 或者和某个 paper 统一即可。优化器只推荐 Momentum 和 Adam。在这些方面做尝试意义不大,如果性能提升反倒可能说明模型不成熟。不推荐做人肉模型设计,比如把某层卷积改大一点,或者微调一下通道数。除非有特别 insight,不要自己乱设计玄学组件,以吸收别人经验为主。
- 超参上,learning rate 最重要,推荐了解 cosine learning rate,其次是 batchsize 和 weight decay。当你的模型还不错的时候,可以试着做数据增广和改损失函数锦上添花了。
- 不管什么模型,先在一个较小的训练集上train和test,看看它能不能过拟合。如果不能过拟合,可能是学习率太大,或者代码写错了。先调小学习率试一下,如果还不行就去检查代码,先看dataloader输出的数据对不对,再看模型每一步的size是否符合自己期待。
- 看train/eval的loss曲线,正常的情况应该是train loss呈log状一直下降最后趋于稳定,eval loss开始时一直下降到某一个epoch之后开始趋于稳定或开始上升,这时候可以用early stopping保存eval loss最低的那个模型。如果loss曲线非常不正常,很有可能是数据处理出了问题,比如label对应错了,回去检查代码。
- 优化器优先用adam,学习率设1e-3或1e-4,再试Radam(LiyuanLucasLiu/RAdam)。不推荐sgdm,因为很慢。
- lrscheduler用torch.optim.lr_scheduler.CosineAnnealingLR,T_max设32或64,几个任务上试效果都不错。(用这个lr_scheduler加上adam系的optimizer基本就不用怎么调学习率了)
- 激活函数用relu一般就够了,也可以试试leaky relu。
参考资料:https://www.zhihu.com/question/41631631
猜你喜欢:👇🏻
⭐【总结】一文了解所有的机器学习评价指标
⭐【总结】机器学习划分数据集的几种方法
⭐【实操】看了太多公式概念?你该学会怎么用T检验了!