pytorch 如何使用float64训练
程序员文章站
2022-03-26 15:12:46
pytorch默认使用单精度float32训练模型,原因在于:使用float16训练模型,模型效果会有损失,而使用double(float64)会有2倍的内存压力,且不会带来太多的精度提升。本人,最近...
pytorch默认使用单精度float32训练模型,
原因在于:
使用float16训练模型,模型效果会有损失,而使用double(float64)会有2倍的内存压力,且不会带来太多的精度提升。
本人,最近遇到需要使用double数据类型训练模型的情况,具体实现需要把模型的权重参数数据类型和输入数据类型全部设置为torch.float64即可。
可使用torch的一个函数,轻松地把模型参数转化为float64
输入类型可使用
补充:float32和float64的本质区别
首先我们需要知道何为bits和bytes?
bits:名为位数bytes:为字节简单的数就是mb和g的关系!
那么8bits=1bytes,下面是各个单位的相互转化!
那么float32和float64有什么区别呢?
数位的区别一个在内存中占分别32和64个bits,也就是4bytes或8bytes数位越高浮点数的精度越高它会影响深度学习计算效率?
float64占用的内存是float32的两倍,是float16的4倍;
比如对于cifar10数据集,如果采用float64来表示,需要60000*32*32*3*8/1024**3=1.4g,光把数据集调入内存就需要1.4g;
如果采用float32,只需要0.7g,如果采用float16,只需要0.35g左右;
占用内存的多少,会对系统运行效率有严重影响;(因此数据集文件都是采用uint8来存在数据,保持文件最小)
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
推荐阅读
-
pytorch 如何使用amp进行混合精度训练
-
如何使用C#将Tensorflow训练的.pb文件用在生产环境详解
-
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
-
pytorch使用horovod多gpu训练的实现
-
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
-
在PyTorch中使用DistributedDataParallel进行多GPU分布式模型训练
-
Pytorch:卷积神经网络CNN,使用重复元素的网络(VGG)训练MNIST数据集99%以上正确率
-
高效使用Pytorch的6个技巧:为你的训练Pipeline提供强大动力
-
使用Pytorch在多GPU下保存和加载训练模型参数遇到的问题
-
Pytorch如何切换 cpu和gpu的使用详解