PyTorch训练与测试模型分别在GPU和CPU上的灵活转换

由于抢不到实验室的gpu资源,决定把毕设需要的训练部署在远程cpu服务器上(gpu服务器太贵搞不起),为了测试模型在gpu和cpu之间来回转换时是否会影响模型的性能,特别做了以下实验。

- 首先明确测试的四种情况:

Device_TrainDevice_Test
GPUGPU
GPUCPU
CPUGPU
CPUCPU
  1. 把数据部署在GPU/CPU上:

    (1)GPU:

    device = torch.device('cuda:0'if torch.cuda.is_available() else 'cpu')
    

    (2) CPU:

    device = torch.device('cpu') #默认即在cpu上
    

    (3) 把网络和数据集部署到对应的设备上:

    net = Network().to(device)
    images,labels = images.to(device),labels.to(device)
    
  2. 保存模型
    torch.save(net.state_dict(),path)
    

    一般用PyTorch训练出来的模型保存的文件名以.pt或者.pth结尾

    如果用到了多个GPU并行处理(torch.nn.DataParallel),则保存模型时用以下方式保存:

    torch.save(net.module.state_dict(),path)
    
  3. 载入模型
    net = Network()
    net.load_state_dict(torch.load(path,map_location=device))
    net.to(device)
    
  4. 训练和测试的区别

(1)训练时,对网络进行设置:

net.train()

开启BN和DropOut

(2)测试时,对网络进行设置:

net.eval()

关闭BN和DropOut的功能,固定参数,避免在测试过程中修改网络的参数。

- 实验结果

​ 本实验的数据集用的是FashinMNIST,训练代码详见本文:https://blog.csdn.net/weixin_41848012/article/details/104776337

Device_TrainDevice_TestAccuracyTime
GPUGPU0.85510.8207
GPUCPU0.85510.9764
CPUGPU0.87190.8231
CPUCPU0.87190.9388

​ 从表格里面可以看出,训练好的模型用不同的设备加载时,不影响性能,只影响程序运行的时间。GPU和CPU之间可以实现数据部署的自由转换。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值