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的Zato发送AMQP消息的教程
Apr 16 Python
Python实现比较两个列表(list)范围
Jun 12 Python
Python实现的多线程http压力测试代码
Feb 08 Python
Python基于百度AI的文字识别的示例
Apr 21 Python
Pandas 同元素多列去重的实例
Jul 03 Python
Python不使用int()函数把字符串转换为数字的方法
Jul 09 Python
使用pandas把某一列的字符值转换为数字的实例
Jan 29 Python
使用Python制作简单的小程序IP查看器功能
Apr 16 Python
详解Python在使用JSON时需要注意的编码问题
Dec 06 Python
python和c语言哪个更适合初学者
Jun 22 Python
django学习之ajax post传参的2种格式实例
May 14 Python
浅谈Python实现opencv之图片色素的数值运算和逻辑运算
Jun 23 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
跟我学Laravel之路由
2014/10/15 PHP
php脚本运行时的超时机制详解
2016/02/17 PHP
PHP数学运算函数大汇总(经典值得收藏)
2016/04/01 PHP
Yii框架日志操作图文与实例详解
2019/09/09 PHP
PHP 计算两个时间段之间交集的天数示例
2019/10/24 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
jQuery对象[0]是什么含义?
2010/07/31 Javascript
JavaScript通过RegExp实现客户端验证处理程序
2013/05/07 Javascript
JS字符串拼接在ie中都报错的解决方法
2014/03/27 Javascript
HTML5+setCutomValidity()函数验证表单实例分享
2015/04/24 Javascript
jQuery获取访问者IP地址的方法(基于新浪API与QQ查询接口)
2016/05/25 Javascript
第十篇BootStrap轮播插件使用详解
2016/06/21 Javascript
浅析Javascript ES6中的原生Promise
2016/08/25 Javascript
JavaScript仿百度图片浏览效果
2016/11/23 Javascript
详解Sea.js中Module.exports和exports的区别
2017/02/12 Javascript
jQuery插件FusionCharts实现的2D饼状图效果【附demo源码下载】
2017/03/03 Javascript
Vue中使用vux配置代码详解
2018/09/16 Javascript
vue-cli的工程模板与构建工具详解
2018/09/27 Javascript
JS div匀速移动动画与变速移动动画代码实例
2019/03/26 Javascript
json数据格式常见操作示例
2019/06/13 Javascript
Node.js path模块,获取文件后缀名操作
2020/11/07 Javascript
[05:29]2014DOTA2国际邀请赛 赛后专访:LGDNewbee顺利过关
2014/07/13 DOTA
基于Python函数和变量名解析
2019/07/19 Python
pandas和spark dataframe互相转换实例详解
2020/02/18 Python
python下载的库包存放路径
2020/07/27 Python
PyTorch中clone()、detach()及相关扩展详解
2020/12/09 Python
意大利文具和办公产品在线商店:Y-Office
2020/02/27 全球购物
出国签证在职证明
2014/09/20 职场文书
疾病证明书
2015/06/19 职场文书
家庭经济困难证明
2015/06/23 职场文书
消夏晚会主持词
2015/06/30 职场文书
为什么 Nginx 比 Apache 更牛逼
2021/03/31 Servers
教你使用Pandas直接核算Excel中快递费用
2021/05/12 Python
TV动画《神废柴☆偶像》公布先导PV
2022/03/20 日漫
python使用torch随机初始化参数
2022/03/22 Python
详解Python中__new__方法的作用
2022/03/31 Python