Pytorch学习笔记

1 Autograd 过程解析

  1. z 是一个 Tensor 变量,当我们执行z.backward()的时候。这个操作将调用 z 里面的 grad_fn(记录并且编码了完整的计算历史)这个属性,执行求导的操作。
  2. 这个操作将遍历 grad_fn 的 next_functions ,然后分别取出里面的Function(AccumulateGrad),执行求导操作。这部分是一个递归的过程直到最后类型为叶子节点。
  3. 计算出结果以后,将结果保存到他们对应的 variable 这个变量所引用的对象的 grad 属性里。
  4. 求导结束。所有的叶节点的 grad 变量都得到了相应的更新。

2 Fine tuning 模型微调

针对某个任务,若自己的训练数据不多,可以先找到一个同类的别人训练好的模型,把现成的训练好的模型拿过来,换成自己的数据,调整一下参数,再训练,这就是微调(fine-tune)

为什么要微调?

  • 对于数据集本身很小(几千张图片)的情况,从头开始训练具有几千万参数的大型神经网络是不现实的,因为越大的模型对数据量的要求越大,过拟合无法避免。这时候如果还想用上大型神经网络的超强特征提取能力,只能靠微调已经训练好的模型。
  • 可以降低训练成本:如果使用导出特征向量的方法进行迁移学习,后期的训练成本非常低,用 CPU 都完全无压力,没有深度学习机器也可以做。
  • 前人花很大精力训练出来的模型在大概率上会比你自己从零开始搭的模型要强悍,没有必要重复造轮子。

Transfer Learning (迁移学习)和 Fine-tune的区别

两者没有严格的区分,含义可以相互交换,只不过后者似乎更常用于形容迁移学习的后期微调。 微调应该是迁移学习中的一部分,只能说是一个trick。

3 几个超参数总结

  1. BATCH_SIZE: 批次数量,定义每次训练时多少数据作为一批,这个批次需要在dataloader初始化时进行设置,并且需要这对模型和显存进行配置。一般设为2的倍数。
  2. DEVICE:进行计算的设备,CPU or GPU
  3. LEARNING_RATE:学习率,反向传播时使用
  4. TOTAL_EPOCHS:训练的批次,一般情况下会根据损失和准确率等阈值

4 判断模型达到瓶颈

  • 损失小了,但是准确率没有提高,若要再进行优化,需要修改模型。
  • 看损失函数,若最后一次的训练的损失函数没有明显的下降趋势,只是在震荡,说明已经没有什么优化的空间了。

5 Adam优化器的使用

只要简单的修改学习率就能够达到优化的效果。一般情况下,学习率首先使用0.1进行预热,然后再用0.01进行大批次的训练,最后使用0.001进行收尾。

6 模型评估

详见:https://www.cnblogs.com/xiaobingqianrui/p/11065935.html

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页