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爬虫常用的模块分析
Aug 29 Python
探究Python中isalnum()方法的使用
May 18 Python
Python中time模块与datetime模块在使用中的不同之处
Nov 24 Python
Using Django with GAE Python 后台抓取多个网站的页面全文
Feb 17 Python
利用Python如何将数据写到CSV文件中
Jun 05 Python
Pandas读取MySQL数据到DataFrame的方法
Jul 25 Python
对TensorFlow的assign赋值用法详解
Jul 30 Python
用python脚本24小时刷浏览器的访问量方法
Dec 07 Python
Django框架之登录后自定义跳转页面的实现方法
Jul 18 Python
用Python抢火车票的简单小程序实现解析
Aug 14 Python
python二维图制作的实例代码
Dec 03 Python
Python 实现集合Set的示例
Dec 21 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操作路径的经典方法(必看篇)
2016/10/04 PHP
javascript 匿名函数的理解(透彻版)
2010/01/28 Javascript
jquery的ajax简单结构示例代码
2014/02/17 Javascript
javascript文件中引用依赖的js文件的方法
2014/03/17 Javascript
JavaScript避免代码的重复执行经验技巧分享
2014/04/17 Javascript
JS功能代码集锦
2016/05/04 Javascript
解决node.js安装包失败的几种方法
2016/09/02 Javascript
layer实现弹窗提交信息
2016/12/12 Javascript
JavaScript注册时密码强度校验代码
2017/06/30 Javascript
详解VUE中v-bind的基本用法
2017/07/13 Javascript
Node.js静态服务器的实现方法
2018/02/28 Javascript
利用Console来Debug的10个高级技巧汇总
2018/03/26 Javascript
vue+webpack实现异步加载三种用法示例详解
2018/04/24 Javascript
Python 含参构造函数实例详解
2017/05/25 Python
对pandas中两种数据类型Series和DataFrame的区别详解
2018/11/12 Python
Python使用requests提交HTTP表单的方法
2018/12/26 Python
pandas数据处理进阶详解
2019/10/11 Python
Django 再谈一谈json序列化
2020/03/16 Python
Keras 快速解决OOM超内存的问题
2020/06/11 Python
keras得到每层的系数方式
2020/06/15 Python
在Mac中配置Python虚拟环境过程解析
2020/06/22 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
2020/06/23 Python
自我评价的正确写法
2013/09/19 职场文书
应届生求职推荐信
2013/10/28 职场文书
某同学的自我鉴定范文
2013/12/26 职场文书
CAD制图设计师自荐信
2014/01/29 职场文书
工作表现自我评价
2014/02/08 职场文书
大学学生会竞选演讲稿
2014/04/25 职场文书
大三学生学年自我鉴定
2014/09/12 职场文书
2014年检验员工作总结
2014/11/19 职场文书
自主招生自荐信范文
2015/03/04 职场文书
特此通知格式
2015/04/27 职场文书
早会开场白台词大全
2015/06/01 职场文书
中国合伙人观后感
2015/06/02 职场文书
医务人员岗前培训心得体会
2016/01/08 职场文书
windows11怎么查看自己安装的版本号? win11版本号的查看方法
2021/11/21 数码科技