news 2026/6/9 20:56:29

深度学习速成:模型的使用与修改,保存与读取

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深度学习速成:模型的使用与修改,保存与读取

1.使用与修改

VGG16为例

import torchvision import torch #trian_data=torchvision.datasets.imagenet("../data_imgnet",train=True,transform=torchvision.transforms.ToTensor(),download=True) vgg16_false=torchvision.models.vgg16(pretrained=False) vgg16_true=torchvision.models.vgg16(weights=torchvision.models.VGG16_Weights.IMAGENET1K_V1) print(vgg16_true) #vgg16_true.add_module("new_fc",torch.nn.Linear(1000,10))#追加全結合層 vgg16_true.classifier.add_module("new_fc",torch.nn.Linear(1000,10))#追加全結合層 print(vgg16_true) print(vgg16_false) vgg16_false.classifier[6]=torch.nn.Linear(4096,10)#在(6)那里修改全连接层 print(vgg16_false)

修改完的输出

2.保存与读取

2.1保存

import torch import torchvision import torch.nn as nn vgg16=torchvision.models.vgg16(weights=None) #保存1 保存整个模型(结构+参数) torch.save(vgg16,"vgg16.pth") #保存2 只保存模型参数(官方推荐,内存小) torch.save(vgg16.state_dict(),"vgg16_params.pth") class tudui(nn.Module): def __init__(self): super().__init__() self.conv1=nn.Conv2d(3,32,5,padding=2)# self.maxpool1=nn.MaxPool2d(2)# self.conv2=nn.Conv2d(32,32,5,padding=2) self.maxpool2=nn.MaxPool2d(2) self.conv3=nn.Conv2d(32,64,5,padding=2) self.maxpool3=nn.MaxPool2d(2) self.flatten=nn.Flatten()# self.linear1=nn.Linear(1024,64)# self.linear2=nn.Linear(64,10)# def forward(self,x): x=self.conv1(x) x=self.maxpool1(x) x=self.conv2(x) x=self.maxpool2(x) x=self.conv3(x) x=self.maxpool3(x) x=self.flatten(x) x=self.linear1(x) x=self.linear2(x) return x tudui_model=tudui() torch.save(tudui_model,"tudui_params.pth")#方法一保存

2.2 读取

import torch import torchvision from model_save import * #方式一 加载模型 """ vgg16=torch.load("vgg16.pth") print(vgg16) """ #方式二 加载模型参数 vgg16=torchvision.models.vgg16(weights=None) vgg16.load_state_dict(torch.load("vgg16_params.pth")) print(vgg16) """ vgg16_params=torch.load("vgg16_params.pth")#字典形式 print(vgg16_params) """ #方式一有陷阱 需要能访问到save时的类定义 im model=torch.load("tudui_params.pth") print(model)

2.3输出结果

(base) PS E:\desktop\deeplearning> & D:\miniconda3\envs\pytorch_py312\python.exe e:/desktop/deeplearning/src/model_load.py e:\desktop\deeplearning\src\model_load.py:10: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature. vgg16.load_state_dict(torch.load("vgg16_params.pth")) VGG( (features): Sequential( (0): Conv2d(3, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (1): ReLU(inplace=True) (2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (3): ReLU(inplace=True) (4): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) (5): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (6): ReLU(inplace=True) (7): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (8): ReLU(inplace=True) (9): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) (10): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (11): ReLU(inplace=True) (12): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (13): ReLU(inplace=True) (14): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (15): ReLU(inplace=True) (16): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) (17): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (18): ReLU(inplace=True) (19): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (20): ReLU(inplace=True) (21): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (22): ReLU(inplace=True) (23): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) (24): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (25): ReLU(inplace=True) (26): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (27): ReLU(inplace=True) (28): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (29): ReLU(inplace=True) (30): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) ) (avgpool): AdaptiveAvgPool2d(output_size=(7, 7)) (classifier): Sequential( (0): Linear(in_features=25088, out_features=4096, bias=True) (1): ReLU(inplace=True) (2): Dropout(p=0.5, inplace=False) (3): Linear(in_features=4096, out_features=4096, bias=True) (4): ReLU(inplace=True) (5): Dropout(p=0.5, inplace=False) (6): Linear(in_features=4096, out_features=1000, bias=True) ) ) e:\desktop\deeplearning\src\model_load.py:19: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature. model=torch.load("tudui_params.pth") tudui( (conv1): Conv2d(3, 32, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2)) (maxpool1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) (conv2): Conv2d(32, 32, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2)) (maxpool2): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) (conv3): Conv2d(32, 64, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2)) (maxpool3): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) (flatten): Flatten(start_dim=1, end_dim=-1) (linear1): Linear(in_features=1024, out_features=64, bias=True) (linear2): Linear(in_features=64, out_features=10, bias=True) )
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/6 13:03:19

Chord与VSCode完美搭配:C++视频分析开发环境配置

Chord与VSCode完美搭配:C视频分析开发环境配置 1. 为什么需要这套组合? 做视频分析开发的朋友可能都经历过这样的场景:刚写完一段OpenCV代码,想调试时发现VSCode里断点根本进不去;或者好不容易调通了模型推理&#x…

作者头像 李华
网站建设 2026/6/6 11:14:32

Granite-4.0-H-350M实战:轻松实现多语言问答与文本摘要

Granite-4.0-H-350M实战:轻松实现多语言问答与文本摘要 1. 为什么350M参数的模型值得你花5分钟试试? 你可能已经用过不少大模型,但有没有试过这样一个模型:它只有3.5亿参数,却能在一台普通笔记本上跑起来&#xff1b…

作者头像 李华
网站建设 2026/6/8 11:45:51

软件测试之——性能测试,Web性能测试用例(详全)

前言 性能测试 简而言之就是模仿用户对一个系统进行大批量的操作,得出系统各项性能指标和性能瓶颈,并从中发现存在的问题,通过多方协助调优的过程。 而web端的性能测试应该注意的指标有:用户操作的响应时间、系统的吞吐量&#…

作者头像 李华
网站建设 2026/6/6 12:43:07

什么是交互测试?

最近有接触到一个有趣的名词:交互测试。 在对这个名词进行解释之前,我先去特意请教了一个产品经理朋友,问下交互的概念。于是知道了我们的行业里面还有很多个有趣的职位:交互设计师、UE、UI、前端、设计.....等等等等这些&#x…

作者头像 李华
网站建设 2026/6/6 13:08:39

最新出炉 -Web自动化测试之playwright:概述

概述 playwright是由微软开发的Web UI自动化测试工具, 支持Node.js、Python、C# 和 Java语言,本文将介绍playwright的特性以及它的简单使用。 playwright特性 playwright具有以下特点: 一、支持所有主流浏览器 支持所有主流浏览器&#x…

作者头像 李华
网站建设 2026/6/9 2:22:29

Docker 高级应用指南:企业级容器化实践

目录引言一、多阶段构建 (Multi-stage Builds)1.1 Go 应用多阶段构建示例1.2 Node.js 应用多阶段构建二、Docker Compose 高级特性2.1 环境变量管理2.2 覆盖配置三、安全强化与最佳实践3.1 安全扫描3.2 Docker 安全配置3.3 运行时安全配置四、CI/CD 集成4.1 GitHub Actions 示例…

作者头像 李华