当前位置: 首页 > news >正文

NVIDIA 深度学习新手入门 Assessment

加载 ImageNet 预训练的基础模型

第一个FIXME,填入 DEFAULT, 参考迁移学习的 Notebook,此处填入 DEFAULT 即在 ImageNet 上预训练权重载入模型。

from torchvision.models import vgg16
from torchvision.models import VGG16_Weightsweights = VGG16_Weights.DEFAULT
vgg_model = vgg16(weights=weights)

冻结基础模型

通过设置 requires_grad_(False) 来冻结基础模型的参数,防止在训练过程中被更新。

vgg_model.requires_grad_(False)

向模型添加新层

nn.Linear(500, N_CLASSES)是模型的最终输出层,我们需要做一个六分类的任务,所以输出层的维度为 6。

N_CLASSES = 6my_model = nn.Sequential(vgg_model.features,vgg_model.avgpool,nn.Flatten(),vgg_model.classifier[0:3],nn.Linear(4096, 500),nn.ReLU(),nn.Linear(500, N_CLASSES)
)

编译模型

这里填入 nn.CrossEntropyLoss() 作为损失函数,因为我们是一个六分类任务,所以选择交叉熵损失函数。

loss_function = nn.CrossEntropyLoss()

扩充数据

这里我先是使用了 O5b Notebook 中的扩充数据代码,但是效果不是很好,原因出在图片的饱和度上,hue值太高导致图片失真,对于水果的新鲜程度和水果的分类来说,颜色是一个重要参考依据,因此这里的饱和度设置不能过高,会误导模型的训练。你也可以将你需要训练的任务描述给AI,让它帮你生成一段扩充数据的代码段,再在此基础上进行微调。

IMG_WIDTH, IMG_HEIGHT = (224, 224)random_trans = transforms.Compose([transforms.RandomRotation(25),transforms.RandomResizedCrop((IMG_WIDTH, IMG_HEIGHT), scale=(.7, 1), ratio=(1, 1)),transforms.RandomHorizontalFlip(p=0.5),transforms.ColorJitter(brightness=.2, contrast=.2, saturation=.2, hue=.05), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])

加载数据集

batch_size 选择

参考 05b Notebook 中的代码设置,这里设置 batch_size 为 32,使用 2 的幂次方可以提高训练效率,在中小型数据集上通常采用 32 作为 batch size。

参考教程中的讲解:

如果我们的数据集是一副卡,那么 DataLoader 就定义了我们如何从这副牌中抽卡来训练 AI 模型。我们可以一次性将整个数据集展示给我们的模型。这不仅需要大量的计算资源,而且研究表明使用较小的数据批次(batch)对模型训练更有效。

例如,如果我们的 batch_size 是 32,我们将洗牌并抽取 32 张卡片来训练我们的模型。由于模型在验证时不进行学习,因此不需要洗牌,但我们仍然会使用 batch_size 以防止内存错误。

批大小是模型开发者决定的,最佳值取决于具体的问题。研究表明,对于许多机器学习问题 32 或 64 就足够了,这也是一些机器学习框架的默认值,因此我们在这就用 32。

shuffle 选择

通常在训练集中设置 shuffle=True,而在验证集中设置 shuffle=False

  • 训练集中设置 shuffle=True 是为了在每个 epoch 开始时随机打乱数据,这有助于模型学习到更泛化的特征。
  • 验证集中设置 shuffle=False 是为了保持验证数据的顺序,这有助于我们在评估模型性能时进行比较。
n = 32train_path = "data/fruits/train/"
train_data = MyDataset(train_path)
train_loader = DataLoader(train_data, batch_size=n, shuffle=True)
train_N = len(train_loader.dataset)valid_path = "data/fruits/valid/"
valid_data = MyDataset(valid_path)
valid_loader = DataLoader(valid_data, batch_size=n, shuffle=False)
valid_N = len(valid_loader.dataset)

训练模型

首次训练模型因为增强数据集的 hue 设置问题,模型准确率只有85%左右,要通过 Assessment,需要模型准确率在 92% 以上。调整增强数据集 transformer 的操作后,模型准确率提升到了90%左右。仍达不到标准要求,因此参考 Notebook 中的操作,再对模型进行微调。

参考 05b Notebook 中的讲解和代码,这时候我们需要解冻模型,以便对新添加的层进行训练。因此设置 vgg_model.requires_grad_(True)

模型的新层经过训练后,我们还有一个可选的技巧,用于进一步改进模型。这个技巧称为微调。要执行此操作,我们需要先解冻整个模型,然后以极小的学习率 重新训练模型。这会让预训练的基础层以非常小的步伐进行微调,从而进一步改进模型的性能。

请注意,只有在包含冻结层和新层的模型经过充分训练后才能执行此步骤,这一点很重要。否则,由于我们先前添加到模型中的新的池化层和分类层是随机地初始化的,我们需要对它们的参数进行大量的更新才能实现准确的图像分类。而通过反向传播过程,在整个模型解冻的状态下,这种对最后两层的大量更新也可能导致预训练层中出现大量更新,从而破坏那些重要的预训练特征。现在这最后2层已经过训练且已收敛,因此再次训练时对模型整体的更新都要小得多(尤其是学习率非常小时),不会破坏前面那些层所预学到的特征。

vgg_model.requires_grad_(True)

模型微调完成后,模型准确率提升到了92%左右,符合要求。运行评估 cell 进行验证即可获得本节课的证书。

参考资料

  1. vgg16 — Torchvision main documentation
  2. torch.Tensor.requires_grad_ — PyTorch 2.10 documentation
  3. Understanding requires_grad in PyTorch — codegenes.net
  4. [How to Choose Loss Functions When Training Deep Learning Neural Networks - MachineLearningMastery.com]
  5. PyTorch Loss Functions - GeeksforGeeks
  6. torch.nn — PyTorch 2.10 documentation
  7. Transforming images, videos, boxes and more — Torchvision 0.25 documentation
  8. Getting started with transforms v2 — Torchvision 0.25 documentation
  9. Transforming images, videos, boxes and more — Torchvision 0.25 documentation
  10. PyTorch DataLoader - GeeksforGeeks
http://www.jsqmd.com/news/340769/

相关文章:

  • 2026年知名的全自动馄饨皮切皮机/切皮机馄饨皮厂家选购指南与推荐 - 品牌宣传支持者
  • 最新专注书刊画册生产的四川厂家盘点:含印刷厂家、手提袋、包装盒、防伪标签厂家 - 深度智识库
  • 中山本味湘菜酒楼、正宗湘菜连锁店、传统湘菜名店哪家好 - 工业设备
  • 【程序员收藏】Spring AI RAG实战:零基础构建大模型知识库系统
  • 哈尔滨木制包装箱服务商哪家好,金源木业口碑获认可 - 工业推荐榜
  • 2026年口碑好的称重包装机/定量包装机最新TOP厂家排名 - 品牌宣传支持者
  • 探讨全国PTFE除尘布袋靠谱厂家排名,中纺环保榜上有名 - 工业设备
  • 偏相关系数的显著性检验
  • 2026年ptfe除尘布袋专业厂家排名,看看哪家更靠谱 - 工业品网
  • 测完这批工具!9个AI论文平台测评对比,本科生毕业论文写作必备
  • 盘点不锈钢表面抛光处理品牌,海龙防腐清洗口碑排名靠前 - 工业品网
  • ACPI!ACPIDetectFilterDevices函数分析和ACPI!ACPIBuildFilter函数分析
  • 全面进化的工程级 3D 可视化 SDK:HOOPS Visualize Desktop 2026.1.0正式发布
  • Spearman相关系数的显著性检验
  • 连锁门店管理系统选型指南:一体化架构如何提升运营效率
  • 高三期末成绩出炉!想象力智能中高考提分实力遥遥领先 - 博客万
  • 2026年安徽地区全自动制袋机加工厂排名,好用靠谱的品牌推荐 - myqiye
  • 第3天:客户分群——识别核心价值群体
  • 【必收藏】2350亿参数!国产医疗大模型Baichuan-M3-235B超越GPT-5.2,全面解析与应用指南
  • 说说郑州拓牌润滑,靠谱的齿轮油批发商排名情况怎么样 - 工业品牌热点
  • 导师又让重写?8个AI论文写作软件测评:自考毕业论文+开题报告高效写作工具推荐
  • Vue技术——JavaScript 数据代理的实现与应用
  • 2026聚氨酯自流平砂浆厂家推荐 权威榜单(产能/专利双维度对比) - 爱采购寻源宝典
  • 真的太省时间 8个AI论文工具测评:研究生毕业论文+科研写作全场景推荐
  • 微型隔膜气泵厂家怎么选?看这份经验榜单与远望流体的实践案例 - 企师傅推荐官
  • 业务架构到底是什么?被教科书绕晕,这很正常
  • 学术探险家的“智能罗盘”:书匠策AI如何重构期刊论文写作地图
  • “沸腾”升级,智选未来:2026国产沸腾干燥机定制优选指南 - 品牌推荐大师
  • 2026年CPVC管厂家推荐榜:从行业痛点到选型指南,读懂优质供应商 - 深度智识库
  • Spark做ETL,与Ray/Daft做特征工程的区别在哪里,如何选型?