news 2026/4/16 14:33:53

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

作者头像

张小明

前端开发工程师

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/4/16 12:22:24

【测试面试】2026年软件测试面试题大全(精品带回答的)

前言 软件测试员是在项目的不同阶段一直从事着各种各样的测试,但是当需要测试所需技能状况时,却找不到一个合适的方法。 ……面试时表现自信: 一般说来,面试首先会从了解求职者的概况开始。 然后大多数就是技术问题了。 一、测…

作者头像 李华
网站建设 2026/4/16 12:46:44

python接口自动化测试 | yaml数据驱动参数化,看完这一篇就够了

前言 在yaml之前,程序大多使用json、xml、ini等格式进行数据的描述和传输,这些格式数据类型简单、可读性不好,yaml作为一种数据格式,但是可读性大大提高,方面人类直接编辑、查看里面的内容。 在实际测试过程中&#…

作者头像 李华
网站建设 2026/4/5 4:49:32

ESP32 控制 NRF24L01 2.4G通信例子

NRF24L01 是一款低成本、低功耗的 2.4G 无线通信模块,搭配 ESP32 使用时基于 SPI 通信,通过RF24库可快速实现无线数据收发。本文从实际项目中提取 NRF24L01 核心通信代码,编写纯接收端和纯发送端最小示例,去掉冗余的 WiFi、网页、…

作者头像 李华
网站建设 2026/4/15 11:37:20

不只“除甲醛”:深挖HNOSS产品体系,看专业服务如何守护家庭呼吸安全

在信息纷杂的除甲醛市场,消费者常常陷入技术名词与效果承诺的迷雾。真正的决策依据,应回归可验证、可体验的产品核心优势。本文将以行业专业视角,深度剖析HNOSS如何通过具象化的技术、产品与服务矩阵,将“健康空气”转化为一套值得…

作者头像 李华
网站建设 2026/4/16 13:36:15

2025年商标注册量最多的省和类别,这个又遥遥领先!

近日商标局发布了2025年四季度各省、自治区、直辖市商标注册申请量、注册量按类别统计表,普推知产商标老杨统计分析发现出来在2025年商标注册申请的一些关键数据。商标注册申请量排名前十的省分别是,广东省,浙江省,山东省&#xf…

作者头像 李华