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在命令行下使用google翻译(带语音)
Jan 16 Python
Python3基础之条件与循环控制实例解析
Aug 13 Python
解决Python requests 报错方法集锦
Mar 19 Python
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
Mar 13 Python
Python读取Word(.docx)正文信息的方法
Mar 15 Python
Python实现高斯函数的三维显示方法
Dec 29 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
Jul 01 Python
利用Python将图片中扭曲矩形的复原
Sep 07 Python
python Paramiko使用示例
Sep 21 Python
python使用requests库爬取拉勾网招聘信息的实现
Nov 20 Python
Python爬取你好李焕英豆瓣短评生成词云的示例代码
Feb 24 Python
python基础之类属性和实例属性
Oct 24 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
apache2.2.4+mysql5.0.77+php5.2.8安装精简
2009/04/29 PHP
常用的PHP数据库操作方法(MYSQL版)
2011/06/08 PHP
PHP curl 抓取AJAX异步内容示例
2014/09/09 PHP
php实现源代码加密的方法
2015/07/11 PHP
WordPress 插件——CoolCode使用方法与下载
2007/07/02 Javascript
基于jquery自己写tab滑动门(通用版)
2012/10/30 Javascript
验证码按回车不变解决方法
2013/03/29 Javascript
教你用jquery实现iframe自适应高度
2014/06/11 Javascript
JS上传图片前实现图片预览效果的方法
2015/03/02 Javascript
javascript中返回顶部按钮的实现
2015/05/05 Javascript
全面理解JavaScript中的继承(必看)
2016/06/16 Javascript
js实现图片360度旋转
2017/01/22 Javascript
vue动画打包后失效问题的解决方法
2018/09/18 Javascript
详解vue+axios给开发环境和生产环境配置不同的接口地址
2019/08/16 Javascript
javascript实现前端分页效果
2020/06/24 Javascript
详解JavaScript之ES5的继承
2020/07/08 Javascript
深入理解Javascript中的this关键字
2015/03/27 Python
使用C语言来扩展Python程序和Zope服务器的教程
2015/04/14 Python
Python多进程入门、分布式进程数据共享实例详解
2019/06/03 Python
Python turtle绘画象棋棋盘
2019/08/21 Python
Python 利用邮件系统完成远程控制电脑的实现(关机、重启等)
2019/11/19 Python
Python网络爬虫信息提取mooc代码实例
2020/03/06 Python
TensorFlow的reshape操作 tf.reshape的实现
2020/04/19 Python
python中threading开启关闭线程操作
2020/05/02 Python
Pycharm导入anaconda环境的教程图解
2020/07/31 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
2020/10/02 Python
Farfetch中文官网:奢侈品牌时尚购物平台
2020/03/15 全球购物
组织关系转移介绍信
2014/01/16 职场文书
演讲比赛获奖感言
2014/02/02 职场文书
网络编辑岗位职责范本
2014/02/10 职场文书
学习党的群众路线教育实践活动心得体会
2014/03/01 职场文书
教师党员整改措施
2014/10/24 职场文书
2014年班主任德育工作总结
2014/12/05 职场文书
小学教师教学反思
2016/02/24 职场文书
创业计划书之溜冰场
2019/10/25 职场文书
Redis实现分布式锁的五种方法详解
2022/06/14 Redis