解决pytorch 保存模型遇到的问题
今天用pytorch保存模型时遇到bug
Can't pickle <class 'torch._C._VariableFunctions'>
在google上查找原因,发现是保存时保存了整个模型的原因,而模型中有一些自定义的参数
将 torch.save(model,save_path)
改为 torch.save(model.state_dict(),save_path)
然后载入模型也做相应的更改就好了
补充:pytorch训练模型的一些坑
1. 图像读取
opencv的python和c++读取的图像结果不一致,是因为python和c++采用的opencv版本不一样,从而使用的解码库不同,导致读取的结果不同。
2. 图像变换
PIL和pytorch的图像resize操作,与opencv的resize结果不一样,这样会导致训练采用PIL,预测时采用opencv,结果差别很大,尤其是在检测和分割任务中比较明显。
3. 数值计算
pytorch的torch.exp与c++的exp计算,10e-6的数值时候会有10e-3的误差,对于高精度计算需要特别注意,比如
两个输入5.601597, 5.601601, 经过exp计算后变成270.85862343143174, 270.85970686809225
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。
相关推荐
-
pytorch 状态字典:state_dict使用详解
pytorch 中的 state_dict 是一个简单的python的字典对象,将每一层与它的对应参数建立映射关系.(如model的每一层的weights及偏置等等) (注意,只有那些参数可以训练的layer才会被保存到模型的state_dict中,如卷积层,线性层等等) 优化器对象Optimizer也有一个state_dict,它包含了优化器的状态以及被使用的超参数(如lr, momentum,weight_decay等) 备注: 1) state_dict是在定义了model或optimiz
-
解决pytorch 模型复制的一些问题
直接使用 model2=model1 会出现当更新model2时,model1的权重也会更新,这和自己的初始目的不同. 经评论指出可以使用: model2=copy.deepcopy(model1) 来实现深拷贝,手上没有pytorch环境,具体还没测试过,谁测试过可以和我说下有没有用. 原方法: 所有要使用模型复制可以使用如下方法. torch.save(model, "net_params.pkl") model5=Cnn(3,10) model5=torch.load('net_
-
解决pytorch 的state_dict()拷贝问题
先说结论 model.state_dict()是浅拷贝,返回的参数仍然会随着网络的训练而变化. 应该使用deepcopy(model.state_dict()),或将参数及时序列化到硬盘. 再讲故事,前几天在做一个模型的交叉验证训练时,通过model.state_dict()保存了每一组交叉验证模型的参数,后根据效果选择准确率最佳的模型load回去,结果每一次都是最后一个模型,从地址来看,每一个保存的state_dict()都具有不同的地址,但进一步发现state_dict()下的各个模型参数的
-
解决pytorch 保存模型遇到的问题
今天用pytorch保存模型时遇到bug Can't pickle <class 'torch._C._VariableFunctions'> 在google上查找原因,发现是保存时保存了整个模型的原因,而模型中有一些自定义的参数 将 torch.save(model,save_path) 改为 torch.save(model.state_dict(),save_path) 然后载入模型也做相应的更改就好了 补充:pytorch训练模型的一些坑 1. 图像读取 opencv的python和c
-
Pytorch保存模型用于测试和用于继续训练的区别详解
保存模型 保存模型仅仅是为了测试的时候,只需要 torch.save(model.state_dict, path) path 为保存的路径 但是有时候模型及数据太多,难以一次性训练完的时候,而且用的还是 Adam优化器的时候, 一定要保存好训练的优化器参数以及epoch state = { 'model': model.state_dict(), 'optimizer':optimizer.state_dict(), 'epoch': epoch } torch.save(state, pat
-
Pytorch 保存模型生成图片方式
三通道数组转成彩色图片 img=np.array(img1) img=img.reshape(3,img1.shape[2],img1.shape[3]) img=(img+0.5)*255##img做过归一化处理,[-0.5,0.5] img_path='/home/isee/wei/image/imageset/result.jpg' img=cv2.merge(img) cv2.imwrite(img_path,img) 单通道数组转化成灰度图 Img_mask=np.array(img_
-
解决pytorch多GPU训练保存的模型,在单GPU环境下加载出错问题
背景 在公司用多卡训练模型,得到权值文件后保存,然后回到实验室,没有多卡的环境,用单卡训练,加载模型时出错,因为单卡机器上,没有使用DataParallel来加载模型,所以会出现加载错误. 原因 DataParallel包装的模型在保存时,权值参数前面会带有module字符,然而自己在单卡环境下,没有用DataParallel包装的模型权值参数不带module.本质上保存的权值文件是一个有序字典. 解决方法 1.在单卡环境下,用DataParallel包装模型. 2.自己重写Load函数,灵活.
-
解决Pytorch 加载训练好的模型 遇到的error问题
这是一个非常愚蠢的错误 debug的时候要好好看error信息 提醒自己切记好好对待error!切记!切记! -----------------------分割线---------------- pytorch 已经非常友好了 保存模型和加载模型都只需要一条简单的命令 #保存整个网络和参数 torch.save(your_net, 'save_name.pkl') #加载保存的模型 net = torch.load('save_name.pkl') 因为我比较懒我就想直接把整个网络都保存下来,然
-
Pytorch提取模型特征向量保存至csv的例子
Pytorch提取模型特征向量 # -*- coding: utf-8 -*- """ dj """ import torch import torch.nn as nn import os from torchvision import models, transforms from torch.autograd import Variable import numpy as np from PIL import Image import to
-
解决在keras中使用model.save()函数保存模型失败的问题
我使用的是anaconda安装的环境,其中有一个是h5py,自动安装的是2.7.0的版本,这个版本会导致保存模型时python奔溃. conda install h5py==2.8.0 将h5py更新一个版本即可解决这个问题. 补充知识:Django安装提示错误 使用sudo pip install ......的时候出现下面一段代码: The directory '/Users/XX/Library/Caches/pip' or its parent directory is not owne
-
关于Pytorch中模型的保存与迁移问题
目录 1 引言 2 模型的保存与复用 2.1 查看网络模型参数 2.2 载入模型进行推断 2.3 载入模型进行训练 2.4 载入模型进行迁移 3 总结 1 引言 各位朋友大家好,欢迎来到月来客栈.今天要和大家介绍的内容是如何在Pytorch框架中对模型进行保存和载入.以及模型的迁移和再训练.一般来说,最常见的场景就是模型完成训练后的推断过程.一个网络模型在完成训练后通常都需要对新样本进行预测,此时就只需要构建模型的前向传播过程,然后载入已训练好的参数初始化网络即可. 第2个场景就是模型的再训练过
随机推荐
- Asp.net XML文档进行添加删改操作的实例代码
- Android实现的可以调整透明度的图片查看器实例
- Java中判断字符串是中文或者英文的工具类分享
- JS对HTML表格进行增删改操作
- javascript模块化是什么及其优缺点介绍
- MySQL 5.6 & 5.7最优配置文件模板(my.ini)
- JS访问DOM节点方法详解
- 早该知道的7个JavaScript技巧
- 网络图片延迟加载实现代码 超越jquery控件
- Javascript调用C#代码
- jQuery中$.each使用详解
- Treegrid的动态加载实例代码
- jQuery EasyUI API 中文文档 可调整尺寸
- php基于GD库画五星红旗的方法
- java编程实现根据EXCEL列名求其索引的方法
- 在ASP.NET中调用存储过程方法新解
- 用PHP调用Oracle存储过程
- Scala安装及环境图文配置教程
- SpringBoot使用FreeMarker模板发送邮件
- 新手入门带你学习JavaScript引擎运行原理