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 控制语句
Nov 03 Python
Python工程师面试题 与Python Web相关
Jan 14 Python
Python基本语法经典教程
Mar 11 Python
python调用Delphi写的Dll代码示例
Dec 05 Python
python保存网页图片到本地的方法
Jul 24 Python
对Pytorch神经网络初始化kaiming分布详解
Aug 18 Python
Python编写打字训练小程序
Sep 26 Python
Python使用tkinter模块实现推箱子游戏
Oct 08 Python
Python参数传递机制传值和传引用原理详解
May 22 Python
keras 自定义loss损失函数,sample在loss上的加权和metric详解
May 23 Python
Python正则re模块使用步骤及原理解析
Aug 18 Python
python爬虫中PhantomJS加载页面的实例方法
Nov 12 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
十天学会php之第九天
2006/10/09 PHP
通用PHP动态生成静态HTML网页的代码
2010/03/04 PHP
php max_execution_time执行时间问题
2011/07/17 PHP
DOM XPATH获取img src值的query
2013/09/23 PHP
PHP限制HTML内容中图片必须是本站的方法
2015/06/16 PHP
javaScript parseInt字符转化为数字函数使用小结
2009/11/05 Javascript
基于jquery的checkbox下拉框插件代码
2010/06/25 Javascript
jQuery简单图表peity.js使用示例
2014/05/02 Javascript
JS+CSS实现实用的单击输入框弹出选择框的方法
2015/02/28 Javascript
Bootstrap每天必学之下拉菜单
2015/11/25 Javascript
Javascript 字符串模板的简单实现
2016/02/13 Javascript
利用yarn代替npm管理前端项目模块依赖的方法详解
2017/09/04 Javascript
jQuery 禁止表单用户名、密码自动填充功能
2017/10/30 jQuery
Nodejs下使用gm圆形裁剪并合成图片的示例
2018/02/22 NodeJs
javascript json字符串到json对象转义问题
2019/01/22 Javascript
js脚本中执行java后台代码方法解析
2019/10/11 Javascript
vue操作dom元素的3种方法示例
2020/09/20 Javascript
[02:06]DOTA2英雄基础教程 暗影萨满
2013/12/16 DOTA
[43:58]DOTA2上海特级锦标赛C组败者赛 Newbee VS Archon第二局
2016/02/27 DOTA
Python中pip安装非PyPI官网第三方库的方法
2015/06/02 Python
Python 使用 attrs 和 cattrs 实现面向对象编程的实践
2019/06/12 Python
python异常触发及自定义异常类解析
2019/08/06 Python
python 爬虫网页登陆的简单实现
2020/11/30 Python
萌新HTML5 入门指南(二)
2020/11/09 HTML / CSS
大学本科毕业生求职简历的自我评价
2013/10/09 职场文书
迎元旦广播稿
2014/02/22 职场文书
文化宣传方案
2014/03/13 职场文书
干部作风整顿个人剖析材料
2014/10/06 职场文书
缓刑人员思想汇报
2014/10/11 职场文书
12.4全国法制宣传日活动方案
2014/11/02 职场文书
典型事迹材料范文
2014/12/29 职场文书
考试作弊检讨
2015/01/27 职场文书
学雷锋献爱心倡议书
2015/04/27 职场文书
《全神贯注》教学反思
2016/02/22 职场文书
Nginx的反向代理实例详解
2021/03/31 Servers
python 网络编程要点总结
2021/06/18 Python