pytorch加载自定义网络权重的实现


Posted in Python onJanuary 07, 2020

在将自定义的网络权重加载到网络中时,报错:

AttributeError: 'dict' object has no attribute 'seek'. You can only torch.load from a file that is seekable. Please pre-load the data into a buffer like io.BytesIO and try to load from it instead.

我们一步一步分析。

模型网络权重保存额代码是:torch.save(net.state_dict(),'net.pkl')

(1)查看获取模型权重的源码:

pytorch源码:net.state_dict()

def state_dict(self, destination=None, prefix='', keep_vars=False):
  r"""Returns a dictionary containing a whole state of the module.

  Both parameters and persistent buffers (e.g. running averages) are
  included. Keys are corresponding parameter and buffer names.

  Returns:
    dict:
      a dictionary containing a whole state of the module

  Example::

    >>> module.state_dict().keys()
    ['bias', 'weight']

  """

将网络中所有的状态保存到一个字典中了,我自己构建的就是一个字典,没问题!

(2)查看保存模型权重的源码:

pytorch源码:torch.save()

def save(obj, f, pickle_module=pickle, pickle_protocol=DEFAULT_PROTOCOL):
  """Saves an object to a disk file.

  See also: :ref:`recommend-saving-models`

  Args:
    obj: saved object
    f: a file-like object (has to implement write and flush) or a string
      containing a file name
    pickle_module: module used for pickling metadata and objects
    pickle_protocol: can be specified to override the default protocol

  .. warning::
    If you are using Python 2, torch.save does NOT support StringIO.StringIO
    as a valid file-like object. This is because the write method should return
    the number of bytes written; StringIO.write() does not do this.

    Please use something like io.BytesIO instead.

函数功能是将字典保存为磁盘文件(二进制数据),那么我们在torch.load()时,就是在内存中加载二进制数据,这就是报错点。

解决方案:将字典保存为BytesIO文件之后,模型再net.load_state_dict()

#b为自定义的字典
torch.save(b,'new.pkl')
net.load_state_dict(torch.load(b))

解决方法很简单,主要记录解决思路。

以上这篇pytorch加载自定义网络权重的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
浅谈python中的面向对象和类的基本语法
Jun 13 Python
Python实现快速排序算法及去重的快速排序的简单示例
Jun 26 Python
使用Python从零开始撸一个区块链
Mar 14 Python
python 列表,数组,矩阵两两转换tolist()的实例
Apr 04 Python
Python封装原理与实现方法详解
Aug 28 Python
理想高通滤波实现Python opencv示例
Jan 30 Python
python 堆和优先队列的使用详解
Mar 05 Python
python实现双色球随机选号
Jan 01 Python
django ORM之values和annotate使用详解
May 19 Python
python爬取微博评论的实例讲解
Jan 15 Python
python基于pexpect库自动获取日志信息
Feb 01 Python
Python用tkinter实现自定义记事本的方法详解
Mar 31 Python
Matplotlib绘制雷达图和三维图的示例代码
Jan 07 #Python
Pytorch 神经网络—自定义数据集上实现教程
Jan 07 #Python
浅谈Python访问MySQL的正确姿势
Jan 07 #Python
pytorch自定义二值化网络层方式
Jan 07 #Python
Pytorch: 自定义网络层实例
Jan 07 #Python
Python StringIO如何在内存中读写str
Jan 07 #Python
Python内置数据类型list各方法的性能测试过程解析
Jan 07 #Python
You might like
点评山进PR-D3L三波段收音机
2021/03/02 无线电
CI框架Session.php源码分析
2014/11/03 PHP
一个PHP实现的轻量级简单爬虫
2015/07/08 PHP
半角全角相互转换的js函数
2009/10/16 Javascript
js function定义函数使用心得
2010/04/15 Javascript
jQueryUI如何自定义组件实现代码
2010/11/14 Javascript
ANGULARJS中用NG-BIND指令实现单向绑定的例子
2014/12/08 Javascript
javascript操作select元素实例分析
2015/03/27 Javascript
JavaScript对象反射用法实例
2015/04/17 Javascript
vue制作加载更多功能的正确打开方式
2016/10/12 Javascript
vue.js实现含搜索的多种复选框(附源码)
2017/03/23 Javascript
Nodejs--post的公式详解
2017/04/29 NodeJs
如何在AngularJs中调用第三方插件库
2017/05/21 Javascript
slideToggle+slideup实现手机端折叠菜单效果
2017/05/25 Javascript
JS中图片压缩的方法小结
2017/11/14 Javascript
vue中的模态对话框组件实现过程
2018/05/01 Javascript
vue中利用simplemde实现markdown编辑器(增加图片上传功能)
2019/04/29 Javascript
JavaScript中工厂函数与构造函数示例详解
2019/05/06 Javascript
node.js实现上传文件功能
2019/07/15 Javascript
JavaScript 截取字符串代码实例
2019/09/05 Javascript
[58:12]Ti4第二日主赛事败者组 LGD vs iG 3
2014/07/21 DOTA
python字符串排序方法
2014/08/29 Python
Python中exit、return、sys.exit()等使用实例和区别
2015/05/28 Python
CentOS中升级Python版本的方法详解
2017/07/10 Python
LRUCache的实现原理及利用python实现的方法
2017/11/21 Python
详解Tensorflow数据读取有三种方式(next_batch)
2018/02/01 Python
Python字符串内置函数功能与用法总结
2019/04/16 Python
python实现连连看辅助之图像识别延伸
2019/07/17 Python
Python K最近邻从原理到实现的方法
2019/08/15 Python
Python 读取 YUV(NV12) 视频文件实例
2019/12/09 Python
python操作toml文件的示例代码
2020/11/27 Python
工作业绩不及格检讨书
2014/10/28 职场文书
2014年就业工作总结
2014/11/26 职场文书
2015年高中生国庆节演讲稿
2015/07/30 职场文书
MySQL基础(二)
2021/04/05 MySQL
Tomcat执行startup.bat出现闪退的原因及解决办法
2022/04/20 Servers