news 2026/10/20 15:14:17

pytorch15->vgg16的修改,保存,加载

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
pytorch15->vgg16的修改,保存,加载
import torch import torchvision from torch import nn # ==================== 1. 加载预训练模型 ==================== print("=" * 50) print("1. 加载预训练 VGG16 模型") vgg16 = torchvision.models.vgg16(pretrained=True) print(vgg16) # 会打印出完整的网络结构 # ==================== 2. 修改模型 (适配 CIFAR-10) ==================== print("\n" + "=" * 50) print("2. 修改最后一层为 10 分类 (适配 CIFAR-10)") # 方法1:直接替换(推荐) vgg16.classifier[6] = nn.Linear(4096, 10) # 方法2:追加一层 # vgg16.classifier.add_module('my_linear', nn.Linear(1000, 10)) print(vgg16) # 打印修改后的结构 # ==================== 3. 模型保存 (P26) ==================== print("\n" + "=" * 50) print("3. 保存模型") # 方式1:保存完整模型(结构 + 参数) torch.save(vgg16, "vgg16_method1.pth") # 方式2:只保存参数(推荐) torch.save(vgg16.state_dict(), "vgg16_method2.pth") print("模型已保存!") # ==================== 4. 模型加载 (P26) ==================== print("\n" + "=" * 50) print("4. 加载模型") # 加载方式1:加载完整模型 # 注意:这样加载需要模型类的定义在当前文件中(如果是自定义模型,需要先定义类) model1 = torch.load("vgg16_method1.pth") print("方式1加载成功!") # 加载方式2:先重建模型结构,再加载参数(推荐) # 注意:重建时必须与保存时的结构完全一致! vgg16_reload = torchvision.models.vgg16(pretrained=False) vgg16_reload.classifier[6] = nn.Linear(4096, 10) # 先做同样的修改 vgg16_reload.load_state_dict(torch.load("vgg16_method2.pth")) print("方式2加载成功!") # ==================== 5. 验证参数一致 ==================== print("\n" + "=" * 50) print("5. 验证参数是否一致") # 比较两种方式加载的模型的第一层卷积核是否相同 same = torch.equal(model1.features[0].weight, vgg16_reload.features[0].weight) print(f"两种方式加载的模型参数是否一致? {same}") print("\n✅ 所有操作完成!")

1.vgg16 = torchvision.models.vgg16(pretrained=True)

pretrained=True 模型vgg16已经拿超级多的图片训练过了=一个见多识广的老人

pretrained=Flase 模型vgg16没训练过=一个小孩子

2.原来是Linear(in_features=4096, out_features=1000, bias=True)

修改有两种方式,方式一直接修改:vgg16.classifier[6] = nn.Linear(4096, 10)

Linear(in_features=4096, out_features=10, bias=True)

方式二vgg16.classifier.add_module('my_linear', nn.Linear(1000, 10))

这是打补丁,推荐使用方式一。

3.保存有两种方式,方式一保存结构和参数:torch.save(vgg16, "vgg16_method1.pth")

方式二用字典只保存参数:torch.save(vgg16.state_dict(), "vgg16_method2.pth")

相当于你要去图书馆看书,方式一是你把连书带书架全都借走了,方式二是只借书,推荐方式二

4.但是使用方式二,你再次加载时需要重新加载骨架,因为你保存时就没保存骨架,像这样:

vgg16_reload = torchvision.models.vgg16(pretrained=False) vgg16_reload.classifier[6] = nn.Linear(4096, 10) # 先做同样的修改 vgg16_reload.load_state_dict(torch.load("vgg16_method2.pth"))

两种保存实质保存的是一个内容,所以卷积核一样

5.为什么要保存pth文件,直接用python文件不好吗?

python文件保存的是目录,不是内容,不是具体的卷积核参数,你保存python文件下一次还得重新加载。保存pth模型文件,记录了上次训练的结果,下次拿来可以直接用

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 3:35:15

UEFI基础知识学习2

一、 UEFI Driver Binding 模型 1、简要描述 UEFI Driver Binding 是 UEFI Driver 管理设备的标准模型。 UEFI Driver 加载后,通过安装 EFI_DRIVER_BINDING_PROTOCOL到Driver Image Handle上,向系统声明自己可以识别、启动和停止某类设备Controller。 2、…

作者头像 李华
网站建设 2026/10/16 6:18:44

2026年猫山郎榴莲冰皮月饼测评:究竟值不值得买?

在消费升级的大背景下,月饼市场也迎来了新的变革。消费者不再满足于传统口味的月饼,对具有独特风味和高品质的月饼需求日益增长。榴莲冰皮月饼作为近年来的热门品类,受到了众多消费者的关注。然而,市场上榴莲冰皮月饼品牌众多&…

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

音视频分离、画质受损?如何无损下载4K/8K超清视频?

在日常搞创作、找素材或者单纯想离线追剧时,你一定遇到过这些让人抓狂的坑: 好不容易下载下来的 4K 视频,结果只有画面没有声音(音视频分离)? 在网站上明明看的是超清,用普通视频下载工具存到…

作者头像 李华
网站建设 2026/10/7 2:45:48

知识库文档清洗:垃圾进垃圾出

先把结论甩在前面:RAG 检索答不准,八成不是模型菜,是你喂进去的文档脏。页眉页脚、PDF 抽出来的乱码、同一段话复制了三遍——这些垃圾不清掉,召回的 chunk 里全是噪声,模型再聪明也是在垃圾堆里翻东西。下面是我这两个…

作者头像 李华
网站建设 2026/10/20 7:28:54

Rockwell Automation工厂获世界经济论坛“全球灯塔工厂”认定

这一殊荣充分彰显了Rockwell新加坡工厂在先进制造领域的卓越实力,以及公司在推动人工智能驱动的数字化转型规模化落地方面发挥的引领作用 Rockwell Automation, Inc.(NYSE:ROK)——全球最大的专注于工业自动化与数字化转型的企业…

作者头像 李华