1.学习率调整
我们还可以为不同子网络设置不同的学习率,这在finetune时经常用到。例:
optimizer =optim.SGD([
# 如果对某个参数不指定学习率,就使用最外层的默认学习率
{'params': net.subnet1.parameters()}, # lr=0.03
{'params': net.subnet2.parameters(), 'lr': 0.01}
], lr=0.03)Copy to clipboardErrorCopied
有时候我们不想让学习率固定成一个常数,那如何调整学习率呢?主要有两种做法。一种是修改optimizer.param_groups
中对应的学习率,另一种是更简单也是较为推荐的做法——新建优化器,由于optimizer十分轻量级,构建开销很小,故而可以构建新的optimizer。但是后者对于使用动量的优化器(如Adam),会丢失动量等状态信息,可能会造成损失函数的收敛出现震荡等情况。
# 调整学习率
for param_group in optimizer.param_groups:
param_group['lr'] *= 0.1 # 学习率为之前的0.1倍
2. 多层感知机模型
- 由于简单的线性回归过于简单,同时多层的线性回归的叠加是没有意义的( c ( a x + b ) +d ) = ac x + c ( b + d ),所以引入了激活函数
- 激活函数有ReLu,Sigmoid,tanh等等,详情见https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter03_DL-basics/3.8_mlp
3.过拟合和欠拟合
过拟合和欠拟合,一个是模拟题刷多了高考考砸了,一个是连模拟题都没刷高考考砸了
过拟合的表现就是在训练集上表现良好,在测试机上拉跨
欠拟合就是两个都拉跨
随后引入两个方案来解决过拟合问题
- 使用权重衰减法
- 使用丢弃法
详见链接https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter03_DL-basics/3.13_dropout