关于
- 个人微信公众号: Mn2+
- 个人博客首页
- 注:学习交流使用!
- 本文简介:LeNet神经网络模型训练
正文
1、requires_grad
(1)在pytorch中,tensor有一个requires_grad参数,如果设置为True,则反向传播时,该tensor就会自动求导。tensor的requires_grad的属性默认为False,若一个节点(叶子变量:自己创建的tensor)requires_grad被设置为True,那么所有依赖它的节点requires_grad都为True(即使其他相依赖的tensor的requires_grad = False)
(2)当requires_grad设置为False时,反向传播时就不会自动求导了,因此大大节约了显存或者说内存。
(3)值得注意的是:requires_grad的设置只能针对叶子结点(网络的权重w就算,bias也算),如何理解叶子结点呢?叶子节点在数据结构中是一棵树没有子节点的结点,在网络中就是这个结点对应的参数不是由更上一层的tensor计算而来。
2、with torch.no_grad()
(1)在该模块下,所有计算得出的tensor的requires_grad都自动设置为False。
(2)即使一个tensor(命名为x)的requires_grad = True,在with torch.no_grad计算,由x得到的新tensor(命名为w-标量)requires_grad也为False,且grad_fn也为None,即不会对w求导。
(3)在神经网络训练过程中,测试阶段及预测阶段不需要更新网络参数,使用该模块大大节约了内存的开销。
3、内存与显存的区别
(1)电脑内存是替CPU暂存资料的储存空间。
(2)显卡显存是替GPU(显卡芯片)暂存资料的储存空间。
(3)内存或显存理论上越大越好。
(4)笔记本内存是可以增加的,但是显卡我们一般不能更换,笔记本大多是独立显示芯片或核显。
4、demo的流程
(1)model.py ——定义LeNet网络模型
(2)train.py ——加载数据集并训练,训练集计算loss,测试集计算accuracy,保存训练好的网络参数
(3)predict.py——得到训练好的网络参数后,用自己找的图像进行分类测试
关注
个人微信公众号:Mn2+
哔哩哔哩:不爱码字的小懒马儿