浅谈pytorch 模型 .pt, .pth, .pkl的区别及模型保存方式


Posted in Python onMay 25, 2020

我们经常会看到后缀名为.pt, .pth, .pkl的pytorch模型文件,这几种模型文件在格式上有什么区别吗?

其实它们并不是在格式上有区别,只是后缀不同而已(仅此而已),在用torch.save()函数保存模型文件时,各人有不同的喜好,有些人喜欢用.pt后缀,有些人喜欢用.pth或.pkl.用相同的torch.save()语句保存出来的模型文件没有什么不同。

在pytorch官方的文档/代码里,有用.pt的,也有用.pth的。一般惯例是使用.pth,但是官方文档里貌似.pt更多,而且官方也不是很在意固定用一种。

模型保存与调用方式一:

保存:

torch.save(model.state_dict(), mymodel.pth)#只保存模型权重参数,不保存模型结构

调用:

model = My_model(*args, **kwargs) #这里需要重新模型结构,My_model
model.load_state_dict(torch.load(mymodel.pth))#这里根据模型结构,调用存储的模型参数
model.eval()

模型保存与调用方式一:

保存:

torch.save(model, mymodel.pth)#保存整个model的状态

调用:

model=torch.load(mymodel.pth)#这里已经不需要重构模型结构了,直接load就可以
model.eval()

补充知识:关于python 导入包 .pth文件

Python在遍历已知的库文件目录过程中,如果见到一个.pth 文件,就会将文件中所记录的路径加入到 sys.path 设置中,于是 .pth 文件说指明的库也就可以被 Python 运行环境找到了。

python中有一个.pth文件,该文件的用法是:

首先xxx.pth文件里面会书写一些路径,一行一个。

将xxx.pth文件放在特定位置,则可以让python在加载模块时,读取xxx.pth中指定的路径。

*******************************************

有时,在用import导入项目文件夹里自己写的python文件时,常常说找不到该文件,这时可以将项目路径添加到PYTHONPATH下。

暂时添加:

import sys
sys.path.append(项目路径)

这种方法只会存在内存里,一旦退出python就没有了

一劳永逸:

在 XXX/pythonXXX/site-packages/ (python 包安装路径) 下新建后缀为 .pth的文件,在其中加入你的项目路径,比如

K:\Desktop\face_detect\DFace-win64-master\src
K:\Desktop\face_detect\DFace-win64-master\src\core

*******************************************

有时候我们正在修改或调试的程序会是一个库,为修改方便,我们可能不大希望把它放到 site-packages 下面,而是更愿意把它保留在原始的工程目录中,以方便 IDE 和版本控制工具进行管理。那么怎么能让 Python 运行环境找到这个库呢?

原理上, Python 运行环境查找库文件时本质是对 sys.path 列表的遍历,如果我们想给运行环境注册新的类库进来,

要么得用代码给 sys.path 列表增加新路径;

要么得调整 PYTHONPATH 环境变量;

要么就得把库文件复制到已经在 sys.path 设置中的路径中去(比如 site-packages 目录);

这些方法都不够方便。最简单的办法是用 .pth 文件来实现。Python 在遍历已知的库文件目录过程中,如果见到一个 .pth 文件,就会将文件中所记录的路径加入到 sys.path 设置中,于是 .pth 文件说指明的库也就可以被 Python 运行环境找到了。

其实,easy_install 所依赖的 egg 包安装就是靠 site-packages 目录下的 .pth 文件添加对 egg 包的引用实现的。所以修改对应的 .pth 文件内容,就可以实现对 egg 包的卸载。

以上这篇浅谈pytorch 模型 .pt, .pth, .pkl的区别及模型保存方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python群发邮件实例代码
Jan 03 Python
python爬虫入门教程之糗百图片爬虫代码分享
Sep 02 Python
Python装饰器decorator用法实例
Nov 10 Python
python链接Oracle数据库的方法
Jun 28 Python
python itchat实现微信好友头像拼接图的示例代码
Aug 14 Python
matplotlib设置legend图例代码示例
Dec 19 Python
利用python实现微信头像加红色数字功能
Mar 26 Python
在matplotlib的图中设置中文标签的方法
Dec 13 Python
自定义django admin model表单提交的例子
Aug 23 Python
使用Pyhton 分析酒店针孔摄像头
Mar 04 Python
Python实现在线批量美颜功能过程解析
Jun 10 Python
python opencv实现简易画图板
Aug 27 Python
Pytorch通过保存为ONNX模型转TensorRT5的实现
May 25 #Python
tensorflow pb to tflite 精度下降详解
May 25 #Python
Python HTMLTestRunner测试报告view按钮失效解决方案
May 25 #Python
python用opencv完成图像分割并进行目标物的提取
May 25 #Python
Pytorch转tflite方式
May 25 #Python
Python HTMLTestRunner库安装过程解析
May 25 #Python
Anaconda+vscode+pytorch环境搭建过程详解
May 25 #Python
You might like
PHP 文件系统详解
2012/09/13 PHP
PHP实现的蚂蚁爬杆路径算法代码
2015/12/03 PHP
PHP 将数组打乱 shuffle函数的用法及简单实例
2016/06/17 PHP
CI框架实现优化文件上传及多文件上传的方法
2017/01/04 PHP
php中get_object_vars()在数组的实例用法
2021/02/22 PHP
JavaScript插件化开发教程(六)
2015/02/01 Javascript
nodejs实现获取当前url地址及url各种参数值
2015/06/25 NodeJs
基于Layer+jQuery的自定义弹框
2020/05/26 Javascript
设置jquery UI 控件的大小方法
2016/12/12 Javascript
jquery中绑定事件的异同
2017/02/28 Javascript
JavaScript运动框架 多值运动(四)
2017/05/18 Javascript
用Vue-cli搭建的项目中引入css报错的原因分析
2017/07/20 Javascript
JS实现的全排列组合算法示例
2017/10/09 Javascript
Hexo已经看腻了,来手把手教你使用VuePress搭建个人博客
2018/04/26 Javascript
vue加载完成后的回调函数方法
2018/09/07 Javascript
使用vue2.0创建的项目的步骤方法
2018/09/25 Javascript
webpack之引入图片的实现及问题
2018/10/08 Javascript
Javascript数组方法reduce的妙用之处分享
2019/06/10 Javascript
解决layui表格的表头不滚动的问题
2019/09/04 Javascript
vue实现在v-html的html字符串中绑定事件
2019/10/28 Javascript
原生js实现贪食蛇小游戏的思路详解
2019/11/26 Javascript
详解Python3.1版本带来的核心变化
2015/04/07 Python
浅谈Python中的zip()与*zip()函数详解
2018/02/24 Python
Python迭代器定义与简单用法分析
2018/04/30 Python
Python3使用turtle绘制超立方体图形示例
2018/06/19 Python
一行python实现树形结构的方法
2019/08/09 Python
python + selenium 刷B站播放量的实例代码
2020/06/12 Python
Python正则表达式高级使用方法汇总
2020/06/18 Python
Python unittest基本使用方法代码实例
2020/06/29 Python
keras 简单 lstm实例(基于one-hot编码)
2020/07/02 Python
荷叶圆圆教学反思
2014/02/01 职场文书
党支部活动策划方案
2014/08/18 职场文书
教你做个可爱的css滑动导航条
2021/06/15 HTML / CSS
如何解决springcloud feign 首次调用100%失败的问题
2021/06/23 Java/Android
Python中的变量与常量
2021/11/11 Python
victoriaMetrics库布隆过滤器初始化及使用详解
2022/04/05 Golang