1.学习率调整

我们还可以为不同子网络设置不同的学习率,这在finetune时经常用到。例:

  1. optimizer =optim.SGD([
  2. # 如果对某个参数不指定学习率,就使用最外层的默认学习率
  3. {'params': net.subnet1.parameters()}, # lr=0.03
  4. {'params': net.subnet2.parameters(), 'lr': 0.01}
  5. ], lr=0.03)Copy to clipboardErrorCopied

有时候我们不想让学习率固定成一个常数,那如何调整学习率呢?主要有两种做法。一种是修改optimizer.param_groups中对应的学习率,另一种是更简单也是较为推荐的做法——新建优化器,由于optimizer十分轻量级,构建开销很小,故而可以构建新的optimizer。但是后者对于使用动量的优化器(如Adam),会丢失动量等状态信息,可能会造成损失函数的收敛出现震荡等情况。

  1. # 调整学习率
  2. for param_group in optimizer.param_groups:
  3. param_group['lr'] *= 0.1 # 学习率为之前的0.1倍

2. 多层感知机模型

  1. 由于简单的线性回归过于简单,同时多层的线性回归的叠加是没有意义的( c ( a x + b ) +d ) = ac x + c ( b + d ),所以引入了激活函数
  2. 激活函数有ReLu,Sigmoid,tanh等等,详情见https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter03_DL-basics/3.8_mlp

3.过拟合和欠拟合

过拟合和欠拟合,一个是模拟题刷多了高考考砸了,一个是连模拟题都没刷高考考砸了
过拟合的表现就是在训练集上表现良好,在测试机上拉跨
欠拟合就是两个都拉跨
随后引入两个方案来解决过拟合问题

  1. 使用权重衰减法
  2. 使用丢弃法

详见链接https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter03_DL-basics/3.13_dropout