PyTorch中.pth文件的解析及应用

news2025/4/18 15:08:02

文章目录

  • 一、.pth文件简介
  • 二、如何保存.pth文件
  • 三、如何加载.pth文件
    • 跨硬件加载
    • 加载后操作
  • 四、.pth文件的结构与内容
    • 解析.pth文件示例
  • 五、.pth文件的优缺点
    • 优点
    • 缺点
  • 六、常见应用场景
  • 七、模型文件体积优化技巧
    • 问题背景
    • 解决方案
    • 效果对比
  • 八、总结
  • 九、参考


一、.pth文件简介

.pth文件是PyTorch中用于保存和加载模型参数的标准文件格式。它不仅可以存储模型的权重(如各层的参数、偏置等),还能保存优化器状态、训练进度(如当前epoch、损失值)等元数据。通过.pth文件,开发者能够快速保存训练好的模型,并在后续任务中复用或恢复训练,避免重复计算资源消耗。

在深度学习中,模型训练通常耗时较长。使用.pth文件保存中间状态或最终模型,可显著提升开发效率,尤其适用于迁移学习、模型部署和协作共享等场景。


二、如何保存.pth文件

PyTorch提供了torch.save()函数来保存模型,支持三种主要方式:

  1. 保存完整模型(包含结构和参数):

    import torch
    import torch.nn as nn
    
    class SimpleModel(nn.Module):
        def __init__(self):
            super().__init__()
            self.fc = nn.Linear(10, 2)
        def forward(self, x):
            return self.fc(x)
    
    model = SimpleModel()
    torch.save(model, 'model.pth')  # 保存整个模型
    
  2. 仅保存模型参数(推荐方式,灵活且轻量):

    torch.save(model.state_dict(), 'model_params.pth')  # 仅保存权重
    
  3. 保存优化器状态和训练进度

    checkpoint = {
        'model_state_dict': model.state_dict(),
        'optimizer_state_dict': optimizer.state_dict(),
        'epoch': 10,
        'loss': 0.02
    }
    torch.save(checkpoint, 'checkpoint.pth')
    

三、如何加载.pth文件

加载文件时需注意模型结构的匹配,具体方法如下:

  1. 加载完整模型

    loaded_model = torch.load('model.pth')
    loaded_model.eval()  # 切换到推理模式
    
  2. 加载模型参数(需预先定义相同结构的模型):

    model = SimpleModel()
    model.load_state_dict(torch.load('model_params.pth'))
    
  3. 恢复训练状态(加载模型、优化器和元数据):

    checkpoint = torch.load('checkpoint.pth')
    model.load_state_dict(checkpoint['model_state_dict'])
    optimizer.load_state_dict(checkpoint['optimizer_state_dict'])
    epoch = checkpoint['epoch']
    loss = checkpoint['loss']
    

跨硬件加载

PyTorch支持在不同硬件设备间灵活加载模型,需通过map_location参数指定目标设备:

  1. 从GPU加载到CPU(适用于无GPU环境):

    model = torch.load('model.pth', map_location=torch.device('cpu'))
    
  2. 从CPU加载到GPU(需确保当前环境有可用GPU):

    # 方式1:自动选择当前GPU(默认cuda:0)
    model = torch.load('model.pth', map_location=torch.device('cuda'))
    # 方式2:指定具体GPU(如cuda:1)
    model = torch.load('model.pth', map_location=torch.device('cuda:1'))
    
  3. 多GPU间的加载(如将原GPU 0的模型加载到GPU 1):

    model = torch.load('model.pth', map_location={'cuda:0': 'cuda:1'})
    
  4. 通用加载方法(动态适配当前设备):

    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
    model = torch.load('model.pth', map_location=device)
    

加载后操作

  • 切换设备:若加载到GPU后需手动将模型参数移至设备:
    model = model.to(device)  # device为'torch.device('cuda')'或'torch.device('cpu')'
    
  • 模式设置:根据任务切换模型模式:
    model.train()   # 训练模式(启用Dropout/BatchNorm)
    model.eval()    # 推理模式(关闭Dropout/BatchNorm)
    

四、.pth文件的结构与内容

.pth文件本质是一个序列化的Python有序字典(collections.OrderedDict),可能包含以下内容:

  • 模型参数:各层的权重和偏置(通过state_dict()获取)。
  • 优化器状态:如Adam优化器的动量、学习率等。
  • 训练元数据:当前epoch、损失值、学习率调度状态等。

解析.pth文件示例

import torch
pthfile = 'model.pth'
model = torch.load(pthfile, map_location='cpu')  # 强制加载到CPU

print("字典类型:", type(model))        # 输出: <class 'collections.OrderedDict'>
print("字典长度:", len(model))         # 输出层数或键值对数量
print("键值列表:", model.keys())      # 输出各层的名称(如conv1.weight, fc.bias)

五、.pth文件的优缺点

优点

  1. 灵活性:支持保存模型参数、优化器状态及自定义元数据。
  2. 高效性:与PyTorch无缝集成,加载速度快。
  3. 可扩展性:可自由添加额外信息(如训练超参数)。

缺点

  1. 依赖模型结构:仅保存参数,加载时需确保模型定义一致。
  2. 文件体积较大:若保存优化器、学习率调度器等额外信息,文件会显著增大(详见第七节优化技巧)。

六、常见应用场景

  1. 模型持久化:保存训练好的模型用于后续推理或部署。
  2. 训练恢复:从上次中断的位置继续训练,避免资源浪费。
  3. 迁移学习:复用预训练模型的权重加速新任务训练。
  4. 协作共享:通过分享.pth文件,他人可直接加载模型,无需重新训练。

七、模型文件体积优化技巧

问题背景

训练保存的.pth文件体积较大,通常是因为额外保存了优化器、学习率调度器、epoch等信息。例如:

checkpoint = {
    'model': model.state_dict(),
    'optimizer': optimizer.state_dict(),
    'lr_scheduler': lr_scheduler.state_dict(),
    'epoch': 200,
    'loss': 0.01
}

解决方案

若只需部署模型或共享权重,可仅保存模型参数:

# 加载完整检查点后提取权重
checkpoint = torch.load('large_checkpoint.pth')
model_weights = checkpoint['model']

# 重新保存为精简文件
torch.save({'model': model_weights}, 'small_model.pth')

效果对比

  • 原始文件(含优化器、调度器等):500MB
  • 精简后(仅模型权重):150MB

八、总结

.pth文件是PyTorch生态中管理模型的核心工具,其灵活性和高效性使其成为模型保存、恢复和共享的首选格式。使用时需注意以下几点:

  1. 结构一致性:若仅保存参数,加载前需确保模型结构与保存时一致。
  2. 硬件兼容性:跨设备加载时需指定map_location参数。
  3. 文件体积控制:通过仅保存模型权重,可显著减小文件大小。

掌握这些技巧,能显著提升深度学习工作流的效率,助力模型快速迭代与部署。


扩展阅读

  • PyTorch官方文档:SAVING AND LOADING MODELS
  • 实战案例:使用.pth文件部署模型到生产环境

九、参考

【Pytorch】一文详细介绍 pth格式 文件

.pth文件的解析和用法

pytorch解析.pth模型文件

深度学习中为什么保存的训练pth模型权重那么大(附解决代码)


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

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

相关文章

后端思维之高并发处理方案

前言 在互联网时代&#xff0c;高并发已经成为后端开发者绕不开的话题。无论是电商平台的秒杀活动、抢购系统&#xff0c;还是社交应用的高频互动&#xff0c;高并发场景的出现往往伴随着巨大的技术挑战。 如何在流量激增的同时&#xff0c;确保系统稳定运行、快速响应&#xf…

14.2linux中platform无设备树情况下驱动LED灯(详细编写程序)_csdn

我尽量讲的更详细&#xff0c;为了关注我的粉丝&#xff01;&#xff01;&#xff01; 因为这跟之前的不一样&#xff0c;提出来驱动的分离和分层。 提到驱动分离和分层&#xff0c;必然可以联系上一章咱们知道的驱动-总线-设备。 在无设备树的状态下&#xff0c;必然要写寄存…

K8s的BackUP备份

文章目录 1、kubeadm 安装的单 master 节点数据备份和恢复方式2、Velero 工具3、Velero 服务部署4、备份还原数据 ETCD备份/还原有多种类型&#xff0c;取决于你 k8s 集群的搭建方式 1、kubeadm 安装的单 master 节点数据备份和恢复方式 拷贝 etcdctl 至 master 节点&#xf…

Ruoyi-vue plus 5.2.2 flowble设计流程点击开始流程图错误

网关设置条件或者是事件删除后出现&#xff0c;点击网关节点无法找到下面的事件节点。 配置页面事件错误&#xff0c;点背景配置进去了事件&#xff0c;发现再次加载&#xff0c;或者删除的时候VUE页面无法加载。 解决方式&#xff1a;查看XML文件&#xff0c;这个节点是否存在…

如何快速入门物联网单片机开发?

背景 物联网单片机硬件开发涉及多个阶段&#xff0c;元器件是否“自己设计”取决于具体需求。以下是详细解答和学习方案&#xff1a; 一、元器件是否自己设计&#xff1f; 通用元器件&#xff1a; 大多数情况下&#xff0c;开发者直接使用现成的标准化元器件&#xff08;如电阻…

在 .NET 8 中使用自定义令牌身份验证掌握 SignalR Hub 安全性

最近在练习做一个 Web 开发项目&#xff0c;需要使用 WebSockets 传输数据&#xff0c;实现实时通信。这是一个 React.js 项目&#xff0c;后端是 .NET。 虽然 MSDN 提供了出色的顶级文档&#xff0c;但它通常缺少高级用例所需的低级细节。 一种这样的场景是使用自定义令牌对…

基于springboot+vue的二手车交易系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

React安装使用教程

ReactAnt Designrouteraxios安装完整教程 官网&#xff1a;React Native 中文网 使用React来编写原生应用的框架 一&#xff0c;安装 npx create-react-app my-app npm start npm eject 暴露项目优先提交代码 git add . git commit -m “搭建项目“ 4.yarn add node-sass …

Day20 -自动化信息收集工具--ARL灯塔的部署

准备&#xff1a; 纯净的Docker环境 ARL的包 一、Docker的部署 00x1 更新系统包 sudo apt update 00x2 安装必要的依赖包 sudo apt install -y apt-transport-https ca-certificates curl software-properties-common 00x3 下载docker和docker-compose apt-get install do…

精品可编辑PPT | “新基建”在数字化智慧高速公路中的支撑应用方案智慧建筑智慧交通解决方案施工行业解决方案

本文详细阐述了“新基建”在数字化智慧高速公路中的支撑应用方案&#xff0c;从政策背景出发&#xff0c;指出国家在交通领域的一系列发展规划和指导意见&#xff0c;强调了智慧交通建设的重要性。分析了当前高速公路存在的问题&#xff0c;如基础感知设施不足、协同水平低、服…

【瑞萨 RA-Eco-RA2E1-48PIN-V1.0 开发板测评】PWM

【瑞萨 RA-Eco-RA2E1-48PIN-V1.0 开发板测评】PWM 本文介绍了瑞萨 RA2E1 开发板使用内置时钟和定时器实现 PWM 输出以及呼吸灯的项目设计。 项目介绍 介绍了 PWM 和 RA2E1 的 PWM 资源。 PWM 脉冲宽度调制&#xff08;Pulse Width Modulation, PWM&#xff09;是一种对模拟…

数据流和重定向

1、数据流 不管正确或错误的数据都是默认输出到屏幕上&#xff0c;所以屏幕是混乱的。所以就需要用数据流重定向将这两 条数据分开。数据流重定向可以将标准输出和标准错误输出分别传送到其他的文件或设备去 标准输入&#xff08;standard input&#xff0c;简称stdin&#xff…

【GPT入门】第33 课 一文吃透 LangChain:chain 结合 with_fallbacks ([]) 的实战指南

[TOC](【GPT入门】第33课 一文吃透 LangChain&#xff1a;chain 结合 with_fallbacks ([]) 的实战指南) 1. fallback概述 模型回退&#xff0c;可以设置在llm上&#xff0c;也可以设置在chain上&#xff0c;都带有with_fallbacks([])函数 2. llm的回退 2.1 代码 核心代码&…

【51单片机】2-7【I/O口】点亮数码管

1.硬件 51最小系统数码管模块 2.软件 静态数码管 #include "reg52.h" //头文件 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8;sbit LSAP2^2;//位选 sbit LSBP2^3; sbit LSCP2^4;u8 code smgduan[17]{0x3f,0x06,0x5b,0x4f,0…

叁仟数智指路机器人的智能导航精度如何?

哇塞&#xff01;各位朋友们&#xff0c;来了解一下超厉害的叁仟数智指路机器人的智能导航精度吧&#xff01;它的精度可是因为采用了不同的定位技术而展现出独特魅力哦&#xff01; 先看蓝牙定位&#xff0c;这可是超实用的&#xff01;一般精度能保持在 3 - 5 米左右呢&…

华为存储考试内容HCIP-Storage

华为认证存储高级工程师 | Huawei Certified ICT Professional-Storage 是培训与认证具备对存储系统进行规划设计、部署实施、性能优化、管理运维和故障处理能力的存储高级工程师 通过该认证证明&#xff1a;工程师能理解闪存及分布式存储产品的相关功能及使用场景&#xff0…

A*算法详解(新手入门)——图文并茂,学习笔记分享

前言 本文是博主在学习A*算法时做的一个小案例&#xff0c;有不懂的地方可以私信博主一起讨论学习&#xff0c;由于博主水平有限&#xff0c;可能存在部分知识点遗漏或书写不够严谨&#xff0c;欢迎各位志同道合的朋友批评指教&#xff0c;博主定当虚心学习&#xff0c;感谢各…

初学STM32系统时钟设置

资料来自正点原子 在学习江科大教程示例的时候默认系统时钟是72MHZ&#xff0c;但是这个系统时钟是怎么过来的呢&#xff0c;通过时钟树以及相关的资料的学习可知&#xff0c;系统时钟它可以是内部RC时钟HSI 8MHZ通过锁相环倍频而来&#xff0c;也可以是外部晶振4-16MHZ通过锁相…

如何在 Windows 10 上安装 PyGame

PyGame 是 Python 编程语言中的一组跨平台模块&#xff0c;这意味着您可以在任何操作系统上安装它&#xff0c;这篇文章告诉您如何在 Windows 10 上安装 PyGame。 如何在 Windows 10 上安装 PyGame&#xff1f; PyGame 依赖于 Python&#xff0c;这意味着您必须在安装 PyGame …

STM32 × CLion 新建项目

STM32 CLion 新建项目 新建和配置一个 STM32 项目 1 创建项目 假如是 ST 官方开发板&#xff0c;比如 NUCLEO 板&#xff0c;选择从 ST 板创建 假如是单芯片或淘宝买的那种 F103 开发板&#xff0c;选择从 MCU 创建 2 STM CubeMX 配置 2.1 Pinout & Configuration 外…