pytorch模型里 safetensors 文件、bin文件和pth文件区别、加载和保存方式

目录

PyTorch模型中的safetensors文件和bin文件区别

safetensors文件

bin文件

结论

区别bin文件和pth文件

1. 文件格式

2. 通用性

3. 期望内容

4. 兼容性和移植性

结论

加载和保存safetensors文件

保存safetensors文件

加载safetensors文件

加载和保存bin文件

保存bin文件

加载bin文件

结论

保存.pth文件

使用torch.save()函数保存模型的状态字典

使用torch.save()函数保存整个模型

加载.pth文件

加载模型的状态字典

加载整个模型

注意事项

备注:

整个模型与模型状态字典的区别

1. 整个模型(Full Model)

2. 模型状态字典(Model State Dict)

结论


PyTorch模型中的safetensors文件和bin文件区别

safetensors文件
  1. 格式:safetensors是PyTorch框架中的一种文件格式,用于安全地保存和加载张量数据。
  2. 用途:它通常用于存储模型的权重和其他参数,确保数据在保存时不会丢失精度,并且在不同的系统和设备之间具有更好的兼容性。
  3. 特点:safetensors格式的文件可能包含了一些额外的元数据,用于验证数据的完整性和一致性。
bin文件
  1. 格式:bin是一种通用的二进制文件格式,它可以被用来存储各种类型的数据,包括但不限于模型权重。
  2. 用途:在PyTorch中,.bin文件通常与模型的配置文件一起使用,用于保存和加载预训练模型的权重。
  3. 特点:bin文件不特定于PyTorch,它不包含用于验证的元数据,因此在跨平台使用时可能需要额外的处理来确保兼容性和数据的正确性。
结论
  • 主要区别:safetensors文件是PyTorch特有的,更注重数据的安全性和兼容性;而bin文件是一种更通用的二进制格式,可能用于多种不同的应用场景。
  • 在PyTorch模型中的使用:两者都可以用来保存模型参数,但safetensors可能提供了更多关于数据安全和校验的特性。

区别bin文件和pth文件

1. 文件格式
  • .bin文件:通常是一个二进制格式的文件,它不特定于PyTorch,并可以用于存储任何类型的二进制数据。在机器学习中,.bin文件有时用于保存模型权重,但这并不是一个由PyTorch强制的标准。
  • .pth文件:是PyTorch特有的文件扩展名,通常用于保存模型的状态字典(state_dict),也可以用于保存整个模型。
2. 通用性
  • .bin文件:由于是通用的二进制格式,它不仅可以在PyTorch中使用,还可以在其他框架或自定义程序中使用。
  • .pth文件:更具体地与PyTorch相关,通常表示该文件是使用PyTorch的API创建和预期使用的。
3. 期望内容
  • .bin文件:没有特定的期望内容,它可以包含任何二进制数据。如果在PyTorch中使用,需要确保你知道如何正确地解析文件中的内容。
  • .pth文件:通常期望包含PyTorch模型的状态字典,或者是保存整个模型对象的序列化形式。
4. 兼容性和移植性
  • .bin文件:可能需要额外的处理才能在不同的系统或框架中使用。
  • .pth文件:由于它是与PyTorch紧密关联的,通常可以在不同的系统上使用PyTorch进行加载而不需要额外的处理。

结论

  • 文件用途.bin文件可以用于多种用途,包括但不限于保存模型权重,而.pth文件在PyTorch中通常用于保存模型的状态字典或整个模型。
  • 框架关联.pth文件与PyTorch框架紧密相关,而.bin文件更通用。
  • 加载方式:加载.bin文件可能需要自定义的解析方法,而.pth文件可以直接通过PyTorch的torch.load函数加载。

在PyTorch中,不论是保存为.bin还是.pth,重要的是保存的内容和加载时的兼容性。通常情况下,使用.pth作为文件扩展名是PyTorch社区中的一个约定俗成的做法。

加载和保存safetensors文件

保存safetensors文件

import torch # 假设model是一个PyTorch模型实例 model = ... # 保存模型的参数 torch.save(model.state_dict(), 'model_safetensors.pth', _use_new_zipfile_serialization=True)

加载safetensors文件

# 加载模型的参数 model.load_state_dict(torch.load('model_safetensors.pth'))

加载和保存bin文件

保存bin文件

# 假设model是一个PyTorch模型实例 model = ... # 保存模型的参数 torch.save(model.state_dict(), 'model_weights.bin')

加载bin文件

# 加载模型的参数 model.load_state_dict(torch.load('model_weights.bin'))

结论

  • 保存:无论是safetensors文件还是bin文件,都可以使用torch.save函数来保存PyTorch模型的参数。对于safetensors,可以通过指定_use_new_zipfile_serialization=True参数来确保使用新的zipfile序列化格式。
  • 加载:同样地,两种文件格式都可以使用torch.load函数来加载,然后使用模型的load_state_dict方法将参数加载到模型中。

在实际操作中,应确保保存和加载时使用相同的文件格式,以避免兼容性问题。此外,当涉及到跨平台或者长期存储时,使用safetensors格式可能更为安全可靠。

保存.pth文件

使用torch.save()函数保存模型的状态字典

import torch # 假设model是你的PyTorch模型 model = ... # 保存模型的状态字典 torch.save(model.state_dict(), 'model.pth')

使用torch.save()函数保存整个模型

# 保存整个模型 torch.save(model, 'model_complete.pth')

加载.pth文件

加载模型的状态字典

# 假设model是你的PyTorch模型的一个实例 model = ... # 加载状态字典 model.load_state_dict(torch.load('model.pth')) # 确保在评估模式下使用模型,关闭Dropout等 model.eval()

加载整个模型

# 加载整个模型 model = torch.load('model_complete.pth') # 确保在评估模式下使用模型,关闭Dropout等 model.eval()

注意事项

  • 在加载模型的状态字典时,你需要先有一个与保存的模型架构相同的模型实例。
  • 当保存整个模型时,PyTorch会保存模型的架构以及状态字典。但这种方式可能在跨平台或在不同的环境中存在兼容性问题,因为模型的保存是依赖于具体的类定义的。
  • 在加载模型之后,通常将模型设置为评估模式 (model.eval()),这对于进行预测或评估模型性能是必要的,因为某些层(如Dropout和BatchNorm)在训练和评估时的行为不同。
  • 如果你在一个不同的环境中加载模型,确保所有自定义的类和方法都已经定义,以便PyTorch能够正确地重建模型。
  • 在保存和加载模型时,如果你使用的是GPU,可能需要在torch.load时添加map_location参数,以指定模型应该加载到哪个设备上。

备注:

整个模型与模型状态字典的区别

1. 整个模型(Full Model)
  • 定义:保存整个模型包括了模型的架构信息和参数权重。这意味着你可以在没有原始模型定义的情况下重建整个模型。
  • 保存内容:模型的类定义、结构和状态字典(包括所有参数和缓存)。
  • 优点
    • 保存和加载简单,只需一行代码。
    • 可以在没有原始模型代码的情况下加载模型。
  • 缺点
    • 保存的模型文件通常较大。
    • 保存的模型与Python版本和PyTorch版本紧密绑定,可能存在兼容性问题。
    • 对于安全性和模型的版本控制不够理想,因为它保存了代码。
2. 模型状态字典(Model State Dict)
  • 定义:模型状态字典是一个包含模型参数的字典对象。它只保存参数(如权重和偏置),不包括模型的架构。
  • 保存内容:模型的参数,即权重和偏置等。
  • 优点
    • 文件大小较小,因为只包含参数值。
    • 更加灵活,可以用于参数的初始化、迁移学习等。
    • 更容易进行版本控制,因为不包含模型架构和额外的代码。
    • 兼容性更好,因为它不依赖于模型的具体类定义。
  • 缺点
    • 需要原始模型的代码来定义模型架构,然后才能加载状态字典。
    • 加载模型时需要更多的步骤,如创建模型实例、加载状态字典等。

结论

  • 选择使用哪种方式取决于具体需求:如果需要在不同的环境中灵活地重用模型参数,或者进行模型的迁移学习,通常推荐使用模型状态字典。如果需要简单地在完全相同的环境中分享或迁移整个模型,可以选择保存整个模型。
  • 推荐使用状态字典进行保存和加载:由于其灵活性和较好的兼容性,通常推荐使用状态字典来保存和加载模型。这样可以确保模型的核心参数能够被正确地应用于相同或修改后的架构中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/663067.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM 内存配置参数积累

0、简介 在进行JVM内存配置时,应当考虑到应用程序的实际需求和运行环境的资源限制,合理分配Xmx、Xms和Xmn参数,以获得最佳的性能表现。通常建议将Xms和Xmx设置为相同的值,以避免JVM在运行过程中动态调整堆大小带来的性能损耗。而…

Axure 动态面板初使用-实现简单的tab切换页面效果

使用工具版本 Axure 9 实现的效果 步骤过程 1、打开Axure 9,默认进入一个空白页,首先从元件库拉一个动态面板到页面中,位置肯定是C位咯~ 2、将面板尺寸调整一下,设置成你喜欢的数字,比如我就喜欢800600 3、然后…

学习日志以及个人总结(13) 指针!

指针 定义 访问内存地址 操控硬件 指针: 指针基本数据据类 指针数组 指针函数 指针指针 1.指针:就是地址-----就是内存的单元的编号 2.指针变量 语法: 基类型* 指针变量名; 基类型-------数据类型//基础数据类型 //数组…

python脚本将照片按时间线整理

说明:有一次自己瞎折腾,然后把服务器相册搞崩了,后来做了备份同步给找了回来,但是相册的时间线全乱了,看起来非常难受。所以就想通过文件夹的形式把照片重新分类,分类后的结构如下(红色字体为文件夹)&#…

item_get-根据ID取商品详情(shopee.item_get):跨境电商的未来趋势

根据您的需求,我为您撰写了一篇关于“item_get-根据ID取商品详情(shopee.item_get):跨境电商的未来趋势”的文章。由于篇幅限制,我将提供文章的概要和部分内容,完整的文章将需要更多细节和展开。 item_get-根据ID取商品详情(shope…

《区块链简易速速上手小册》第7章:区块链在其他行业的应用(2024 最新版)

文章目录 7.1 供应链管理7.1.1 供应链管理中区块链的基础7.1.2 主要案例:食品安全追踪7.1.3 拓展案例 1:制药供应链7.1.4 拓展案例 2:汽车行业的零部件追踪 7.2 区块链在医疗保健中的应用7.2.1 医疗保健中区块链的基础7.2.2 主要案例&#xf…

今天聊聊软件研发部门孵化策略

声明:上述内容纯属个人瞎说,如有雷同请联系删除。 引:公司研发二部的同事召回来了,这边先恭喜他们荣耀而归。大家都欢心鼓舞、人事嘘寒问暖、综合端盘倒水;真热闹……。我们部门的同事就在边上办公,感触很深…

如何处理缓存一致性问题

* 如何解决缓存一致性问题 * 1. 更新缓存 * ①先更新缓存,再更新数据库. 如果先更新缓存成功了,但是更新数据库失败了,那么数据库将出现脏数据,否掉 * ②先更新数据库,再更新缓存. 如果先更新数据库,但更…

1451A/D/F捷变信号发生器

01 1451A/D/F捷变信号发生器 产品综述: 1451系列捷变信号发生器采用直接数字合成(DDS)技术和直接模拟合成技术(ADS)相结合的设计方案,实现覆盖10MHz~3/20/40GHz全频段的频率捷变,捷变时间小于…

UMI初始化脚手架 Simple App、 Ant Design Pro、Vue Simple App、Umi Plugin 4者的区别

这四个概念分别代表不同的工具和框架,它们的主要区别如下: Simple App:这通常指的是一个基础的、最小化的应用程序。它可能只包含最基础的功能,如用户界面、一些简单的交互等。这种应用程序通常用于学习和实验目的,或者…

分布式事务(四)——TCC补偿模式解决方案

系列目录: 《分布式事务(一)—— 事务的基本概念》 《分布式事务(二)—— CAP和Base理论》 《分布式事务(三)—— 两阶段提交解决方案(2PC)》 一、常见分布式事务解决…

Android selinux调试(rk3588 android 12平台)

Android selinux调试(rk3588 android 12平台): 参考文档: Android系统10 RK3399 init进程启动(二十七) Selinux Type和Attribute https://www.jb51.net/article/277418.htm Android selinux策略文件的编译与加载 https://c.biancheng.net/view/1151.h…

WPF DataTemplate内重写BorderBrush,VisualBrush内数据源绑定提示绑定失败

定义DataTemplate 数据模板文件&#xff0c;内容如下 <DataTemplate x:Key"{DataTemplateKey {x:Type VM:TemplateListVM}}" DataType"{x:Type VM:TemplateListVM}"> <Grid Margin"0" Grid.Row"3" Height"50" Ver…

python:lxml 生成思维导图 Freemind(.mm)文件

请参阅&#xff1a;从PDF中提取目录 或者 java : pdfbox 读取 PDF文件内书签 pip install lxml ; lxml-5.1.0-cp310-cp310-win_amd64.whl (3.9 MB) 读目录.txt文件&#xff0c;使用 lxml 生成思维导图 Freemind&#xff08;.mm&#xff09;文件 编写 txt_etree_mm.py 如下…

QML自定义ComboBox组件,支持动态筛选

QtQuick.Controls提供了ComboBox组件&#xff0c;该组件能够满足日常的下拉选择框的需求&#xff0c;但当需要用户在ComboBox中通过输入关键字进行自动匹配时&#xff0c;原生的组件虽然提供了editable属性用于输入关键字&#xff0c;但是匹配内容不弹出下拉框&#xff0c;无法…

03、全文检索 -- Solr -- Solr 身份验证配置(给 Solr 启动身份验证、添加用户、删除用户)

目录 全文检索 -- Solr -- Solr 身份验证配置启用身份验证&#xff1a;添加用户&#xff1a;删除用户&#xff1a; 全文检索 – Solr – Solr 身份验证配置 学习之前需要先启动 Solr 执行如下命令即可启动Solr&#xff1a; solr start -p <端口>如果不指定端口&#xf…

7-2.递归思想代码练习题

例题1.按顺序打印一个数据的每一位 1234 输出 1 2 3 4 解决问题的思路 如何拿到这个数的每一位 1234%104 1234/10123 123%103 123/1012 12%102 12/101 1%101 递推公式&#xff1a;%10 /10 初始条件&#xff1a;1-9之间的数直接打印&#xff08;n<10&#xff09; n>10 进行…

最近nvm安装报错的原因找到了——npm原淘宝镜像正式到期!

前言 &#x1f4eb; 大家好&#xff0c;我是南木元元&#xff0c;热爱技术和分享&#xff0c;欢迎大家交流&#xff0c;一起学习进步&#xff01; &#x1f345; 个人主页&#xff1a;南木元元 目录 背景 错误原因 问题排查 淘宝镜像 证书到期 问题解决 结语 背景 我们…

HAL库配置CAN通信

一、CAN总线波特率计算 CAN总线通信的各节点通信时会产生相位差&#xff0c;所以要进行位同步&#xff0c;两个节点保持步调一致。 CAN_SJW&#xff1a;重新同步跳跃宽度(SJW) 。定义了在每位中可以延长或缩短多少个时间单元的上限。其值可以编程为1到4个时间单元。 CAN_BS1&a…

centos7 安装nacos

在 CentOS 7 上安装 Nacos 的步骤可以概括如下&#xff1a; 前提条件&#xff1a; 安装Java环境&#xff1a;Nacos依赖于Java 8或以上版本&#xff0c;确保系统已安装Java。可以通过以下命令检查和安装&#xff08;假设使用OpenJDK&#xff09;&#xff1a; # 检查是否已安装…