(1)每个优化器都是一个类,一定要进行实例化才能使用,比如:
(2)optimizer:
(3)optimizer在一个神经网络的epoch中需要实现下面两个步骤:
梯度置零,梯度更新。
深度学习的目标是通过不断改变网络参数,使得参数能够对输入做各种非线性变换拟合输出,本质上就是一个函数去寻找最优解,只不过这个最优解是一个矩阵,而如何快速求得这个最优解是深度学习研究的一个重点——以经典的resnet-50为例,它大约有2000万个系数需要进行计算,那么我们如何计算出来这么多的系数,有以下两种方法:
(1)第一种是最直接的暴力穷举一遍参数,这种方法的实施可能性基本为0,堪比愚公移山plus的难度。
(2)为了使求解参数过程更加快,人们提出了第二种办法,即就是是BP+优化器逼近求解。
因此,优化器就是根据网络反向传播的梯度信息来更新网络的参数,以起到降低loss函数计算值,使得模型输出更加接近真实标签。
Pytorch提供了一个优化器的库,在这里面给我们提供了十种优化器。
而以上这些优化算法均继承于,下面我们先来看下所有优化器的基类。定义如下:
结果为:
完成了上述设定后就可以加载数据开始训练模型了。之前在DataLoader构建完成后介绍了如何从中读取数据,在训练过程中使用类似的操作即可,区别在于此时要用for循环读取DataLoader中的全部数据。
训练过程:
完整的:
验证/测试的流程基本与训练过程一致,不同点在于:
验证的完整过程:
(1)pytorch官方文档
(2)datawhale notebook
(3)Coding基础概念:.pkl文件是什么?python
(4)pytorch文档阅读(四)如何在GPU上训练