[深度学习] Pytorch(三)—— 多/单GPU、CPU,训练保存、加载预测模型问题

上一篇实践学习中,遇到了在多/单个GPU、GPU与CPU的不同环境下训练保存、加载使用使用模型的问题,如果保存、加载的上述三类环境不同,加载时会出错。就去研究了一下,做了实验,得出以下结论:

多/单GPU训练保存模型参数、CPU加载使用模型

#保存
PATH = 'cifar_net.pth'
torch.save(net.module.state_dict(), PATH) #加载
net = Net()
net.load_state_dict(torch.load(PATH))

多GPU训练模型、单GPU加载使用模型

#保存
PATH = 'cifar_net.pth'
torch.save(net.state_dict(), PATH) #加载
net = Net()
net = nn.DataParallel(net) #保存多GPU的,在加载时需要把网络也转成DataParallel的
net.to(device) #放到GPU上
net.load_state_dict(torch.load(PATH)) # 然后测试数据也需要放到GPU上
images, labels = images.to(device), labels.to(device)

多GPU训练保存模型参数、多GPU加载使用模型

#保存
PATH = 'cifar_net.pth'
torch.save(net.state_dict(), PATH) #加载
net = Net()
net = nn.DataParallel(net) #保存多GPU的,在加载时需要把网络也转成DataParallel的
net.to(device) #放到GPU上
net.load_state_dict(torch.load(PATH)) # 然后测试数据也需要放到GPU上
images, labels = images.to(device), labels.to(device)

可以看到,单GPU和多GPU加载数据的方法其实是一样的,经运行验证,只要按上述代码写,有多个GPU就调用多个,只有一个就调用一个。

另外,保存、加载网络模型有三种不同的做法

1.保存整个网络模型

2.只保存模型参数(我们用的就是这种)

3.自定义保存

详细方法,请参考:https://blog.csdn.net/Code_Mart/article/details/88254444

[深度学习] Pytorch(三)—— 多/单GPU、CPU,训练保存、加载模型参数问题的更多相关文章

  1. VSTO学习笔记(三) 开发Office 2010 64位COM加载项

    原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(A ...

  2. PyTorch保存模型与加载模型+Finetune预训练模型使用

    Pytorch 保存模型与加载模型 PyTorch之保存加载模型 参数初始化参 数的初始化其实就是对参数赋值.而我们需要学习的参数其实都是Variable,它其实是对Tensor的封装,同时提供了da ...

  3. 使用Pytorch在多GPU下保存和加载训练模型参数遇到的问题

    最近使用Pytorch在学习一个深度学习项目,在模型保存和加载过程中遇到了问题,最终通过在网卡查找资料得已解决,故以此记之,以备忘却. 首先,是在使用多GPU进行模型训练的过程中,在保存模型参数时,应 ...

  4. 深度学习“引擎”之争:GPU加速还是专属神经网络芯片?

    深度学习“引擎”之争:GPU加速还是专属神经网络芯片? 深度学习(Deep Learning)在这两年风靡全球,大数据和高性能计算平台的推动作用功不可没,可谓深度学习的“燃料”和“引擎”,GPU则是引 ...

  5. [深度学习] Pytorch学习(一)—— torch tensor

    [深度学习] Pytorch学习(一)-- torch tensor 学习笔记 . 记录 分享 . 学习的代码环境:python3.6 torch1.3 vscode+jupyter扩展 #%% im ...

  6. pytorch在CPU和GPU上加载模型

    pytorch允许把在GPU上训练的模型加载到CPU上,也允许把在CPU上训练的模型加载到GPU上.CPU->CPU,GPU->GPU torch.load('gen_500000.pkl ...

  7. 深度学习原理与框架-猫狗图像识别-卷积神经网络(代码) 1.cv2.resize(图片压缩) 2..get_shape()[1:4].num_elements(获得最后三维度之和) 3.saver.save(训练参数的保存) 4.tf.train.import_meta_graph(加载模型结构) 5.saver.restore(训练参数载入)

    1.cv2.resize(image, (image_size, image_size), 0, 0, cv2.INTER_LINEAR) 参数说明:image表示输入图片,image_size表示变 ...

  8. 炫!一组单元素实现的 CSS 加载进度提示效果

    之前的文章个大家分享过各种类型的加载效果(Loading Effects),这里再给大家奉献一组基于单个元素实现的 CSS 加载动画集合.这些加载效果都是基于一个 DIV 元素实现的,十分强悍. 温馨 ...

  9. Android 学习笔记之Volley(八)实现网络图片的数据加载

    PS:最后一篇关于Volley框架的博客... 学习内容: 1.使用ImageRequest.java实现网络图片加载 2.使用ImageLoader.java实现网络图片加载 3.使用NetWork ...

随机推荐

  1. log4j系统日志(转载)

    地址:http://www.codeceo.com/log4j-usage.html 日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录.在a ...

  2. Ubuntu安装Redis过程完整笔记

    在阿里云与百度云均已经安装成功~~ 下载文件 切换路径设置下载存放地址 cd /home 下载安装包(http://download.redis.io/releases建议下载最新稳定版本) sudo ...

  3. ES6语法——let和const

    一.let 1.定义 ES6新增了let命令,用来声明变量,用法类似于var,但是和var有一定的区别 2.let只在块级作用域内有效 首先来看一个比较简单的例子,请告诉我,他们分别输出什么 //代码 ...

  4. Java顺序查找、二分查找

    Java顺序查找.二分查找   查找算法中顺序查找算是最简单的了,无论是有序的还是无序的都可以,只需要一个个对比即可,但其实效率很低. 顺序查找 动图演示 详细代码 // 顺序查找 public st ...

  5. js中实现继承的方法

    目录 借用构造函数 组合继承 原型式继承 寄生式继承 寄生组合式继承 借用构造函数 这种技术的基本思想很简单,就是在子类型构造函数的内部调用超类型的构造函数.另外,函数只不过是在特定环境中执行代码的对 ...

  6. PHP : CodeIgniter mysql_real_escape_string 警告

    版本 CodeIgniter 3 PHP 5.4 感谢万能的stackoverflow. 得修改CodeIgniter的源码. ./system/database/drivers/mysql/mysq ...

  7. P.SDA1.DEV - 一个没有服务器的图床

    图床特色 P.SDA1.DEV的愿景是为大家提供一个免费.长期稳定外链分享图片的选择. P.SDA1.DEV的主要特点有: 完全建构在Serverless云服务上,致力于提供(墙外)可用性99.9%的 ...

  8. Java中解决继承和接口默认方法冲突

    1)超类优先.如果超类提供了一个具体方法,同名而且有相同参数类型发默认方法会被忽略. 2)接口冲突.如果一个超接口提供了一个默认方法,另一个接口提供了一个同名而且参数类型(不论是否是默认参数)相同的方 ...

  9. spring tx——@EnableTransactionManagement

    @EnableTransactionManagement import了TransactionManagementConfigurationSelector,而TransactionManagemen ...

  10. Python 简明教程 --- 26,Python 多进程编程

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 学编程最有效的方法是动手敲代码. 目录 1,什么是多进程 我们所写的Python 代码就是一个程序, ...