烟台福山建设规划局网站,小企业做网站有没有用,宝塔搭建wordpress主机地址,关键词排名软件何为AMP#xff1f;
全称#xff1a;Automatic mixed precision自动混合精度。 功能#xff1a;在神经网络推理过程中#xff0c;实现针对不同层采用不同的数据精度进行计算#xff0c;从而实现节省显存和加速训练的目的。 此处提到的不同数据精度包括#xff1a;32位浮…何为AMP
全称Automatic mixed precision自动混合精度。 功能在神经网络推理过程中实现针对不同层采用不同的数据精度进行计算从而实现节省显存和加速训练的目的。 此处提到的不同数据精度包括32位浮点型torch.FloatTensor()和16位半精度浮点型torch.HalfTensor()。 注意 1.torch默认精度为32位。 2.amp的使用仅当网络训练在gpu上时torch.cuda.amp
为何使用AMP
考虑到32位和16位更有优缺点想要综合分段采用32位和16位消除各自的劣势帮助网络更高效训练。
当网络仅采用32位训练时—优势32位能很好的将较小的精度数值保存下来完成梯度计算。劣势batch_size不敢设置过大对于设备的数据存储能力提出较高要求等。当网络仅采用16位训练时—优势存储小计算快减少显存占用。劣势数值范围小容易出现overflow or underflow。舍入误差由于误差数值达不到16bit导致梯度丢失。
何时使用AMP
amp中的autocast会根据PyTorch框架进行自动转换如一般在cond、linear、激活函数等操作中自动转换成16位精度计算。
如何使用AMP
AMP中包含两个功能模块分别位autocast和GradScaler。
torch.cuda.amp.autocast()自动切换32位和16位但可能会在切换的过程中导致精度的损失而出现梯度丢失产生loss NAN问题。 yolox/core/trainer.py中对应的代码展示 可以看出它只存在于前向计算中而未参加反向传播。torch.cuda.amp.GradScaler()通过放大loss值来防止梯度消失。 注意这里面的放大scaler大小是依靠每次迭代时动态估计获得动态估计指每次epoch时都看一眼有没有出现inf or NAN等错误若没有出现则尽可能的增大scaler值。 yolox/core/trainer.py中对应的代码展示 可以看出它用在反向传播中但是却没有参与权重梯度的更新只有一个step()。