news 2026/3/26 23:22:04

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

作者头像

张小明

前端开发工程师

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/3/21 16:37:21

演示下 一个qkv网络逐步趋向出局部加法结构的过程的每个详细的子步骤 -----来自deepseek的回答

演示下 一个qkv网络的内部权重从完全随机 到训练 【【一道小学数学应用题【学校里有2个苹果和3个梨,问学校里一共有几个水果?】这个题和答案5,代入到QKV网络里训练】后 逐步趋向出局部加法结构的过程的每个详细的子步骤 ----来自deepseek…

作者头像 李华
网站建设 2026/3/16 15:09:17

外包干了17天,技术倒退明显

先说情况,大专毕业,18年通过校招进入湖南某软件公司,干了接近6年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能…

作者头像 李华
网站建设 2026/3/20 4:49:06

以下7种硬件测试的种类,不知道的赶紧收藏了!

硬件产品测试的 7 大种类 信号质量测试 时序测试 功能测试 性能测试 容错测试 长时间测试 一致性测试 信号质量测试 1.信号质量测试: 信号质量测试,是很底层与直接的一项测试,需要对硬件板卡本身有相当的了解才能进行。另外,板…

作者头像 李华
网站建设 2026/3/25 2:07:16

常用API

成员变量与局部变量 包 String集合

作者头像 李华
网站建设 2026/3/26 15:01:05

Python 初级入门教程:从零开始掌握编程基础

目录 引言一、Python 简介与特点二、环境搭建与准备工作三、Python 基础语法详解3.1 变量与数据类型3.2 控制结构3.3 函数定义与使用 四、常用数据结构与操作4.1 列表操作4.2 字典操作 五、文件操作与异常处理5.1 文件操作5.2 异常处理 六、实用案例:学生成绩管理系…

作者头像 李华