news 2026/9/8 15:56:46

PyTorch 图像分类实战:把 FoodVision 从训练循环跑进 Gradio 的 5 个环节

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PyTorch 图像分类实战:把 FoodVision 从训练循环跑进 Gradio 的 5 个环节

PyTorch 图像分类实战:把 FoodVision 从训练循环跑进 Gradio 的 5 个环节

【免费下载链接】pytorch-deep-learningMaterials for the Learn PyTorch for Deep Learning: Zero to Mastery course.项目地址: https://gitcode.com/GitHub_Trending/py/pytorch-deep-learning

把 FoodVision 数据集喂进 PyTorch 之前,先确认两件事:train 和 test 是不是分成了两个 DataLoader,transform 是不是同一套。上回有同事把测试集也shuffle=True了,训练时指标漂亮,一到评估就掉——这不是模型问题,是数据管道的问题。这个仓库(pytorch-deep-learning)本身就是按"数据 → 训练 → 模型 → 迁移 → 上线"的顺序组织的,下面照着这条真实落地链路走一遍,每个环节只讲这一步该干什么、为什么这么干。

加载 FoodVision:train 和 test 各建一个 DataLoader

数据这一步的目标不是"把图片读进来",而是让训练和验证在加载层面就彻底隔离。仓库里的create_dataloaders已经替你做了最稳的那版:两个ImageFolder、两个DataLoader,训练集开 shuffle 和pin_memory,测试集关 shuffle。

from torchvision import transforms from going_modular.data_setup import create_dataloaders transform = transforms.Compose([ transforms.Resize((224, 224)), transforms.ToTensor(), ]) # train 开 shuffle,test 关 shuffle,这是唯一该改的地方 train_dl, test_dl, class_names = create_dataloaders( train_dir="data/pizza_steak_sushi/train", test_dir="data/pizza_steak_sushi/test", transform=transform, batch_size=32, )

这段代码解决的是"两条数据流怎么隔离"。细节都在 数据加载函数 里,你只需要保证transform在两边是同一个对象,否则训练时看到的像素分布和评估时对不上。

五步走写一个会收敛的训练循环

训练循环是整个项目的地基,写对了后面所有东西都是复用的。一个 epoch 里对每个 batch 做五件事:前向、算 loss、清梯度、反向、更新参数。顺序不能乱,尤其是zero_grad()必须放在loss.backward()之前。

for batch, (X, y) in enumerate(train_dl): X, y = X.to(device), y.to(device) y_pred = model(X) # 1 前向 loss = loss_fn(y_pred, y) # 2 算 loss optimizer.zero_grad() # 3 清梯度 loss.backward() # 4 反向 optimizer.step() # 5 更新参数

⚠️ 这里最容易踩的坑是把model.train()/model.eval()忘了切。评估时如果模型还处在 train 模式,Dropout 和 BatchNorm 的行为会污染指标。仓库把这套五步包成了train_steptest_step,再套一层train跑多个 epoch,逻辑和 训练循环实现 完全一致,直接 import 就行,不用自己重写。

用 EfficientNet 特征提取器省掉从头训练

数据量小的时候,从头训一个 CNN 往往又慢又不过拟合。更省事的打法是迁移学习:拿一个在 ImageNet 上预训练好的特征提取器,把它的分类头砍掉,换成你自己 101 类的分类头,然后把特征层全部冻结。

import timm feature_extractor = timm.create_model("hf_hub:timm/efficientnet_b2", pretrained=True, num_classes=0) # 0 表示去掉原分类头 for p in feature_extractor.parameters(): p.requires_grad = False # 冻结,只训新加的分类头

num_classes=0是关键参数,它直接让模型只输出特征、不带分类头,你后面接自己的nn.Linear就行。想确认冻结有没有生效,用torchinfo打一下 summary 看可训练参数量是否骤降。完整思路在 迁移学习 notebook,模型骨架参考 TinyVGG 定义。

用 Gradio 把模型变成一个网页 demo

模型训好了,下一步不是写 API,而是先让它能被点。Gradio 的Interface只要三样东西:一个fn、一组inputs、一组outputs。把前向推理塞进fn,其余交给组件。

import gradio as gr def predict(image): image = transform(image).unsqueeze(0).to(device) with torch.inference_mode(): logits = model(image) # 前向推理 return torch.argmax(logits, dim=1).item() demo = gr.Interface(fn=predict, inputs=gr.Image(type="numpy"), outputs=gr.Label(num_top_classes=3)) demo.launch()

这段解决"怎么让非工程师也能试模型"。顺手可以开一个 TensorBoard 记录每轮 loss 和 acc,对比不同超参的实验,仓库里 实验追踪 那节给的就是现成模板。上线细节看 部署 notebook。

下一步

想接着动手的话,README 的环境配置说明 和 部署练习 是最顺的两个入口,照着跑通一遍比读十遍文档都管用。

【免费下载链接】pytorch-deep-learningMaterials for the Learn PyTorch for Deep Learning: Zero to Mastery course.项目地址: https://gitcode.com/GitHub_Trending/py/pytorch-deep-learning

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

一些常用名词

query:搜索引擎里输入的那串文字,在AI和API的语境里,Query "带参数的调用指令" ,Query就是"带着具体参数的请求"。 它本身不干活,它只是把你"想要什么"和"条件是什么"打包成…

作者头像 李华
网站建设 2026/9/8 15:55:54

OpenClaw零代码部署实战:用ToClaw图形化界面快速搭建AI助理

如果你最近关注 AI Agent 圈,大概率刷到过 OpenClaw 这个名字。简单说,它是一个开源的、能自己动手干活的 AI 助理框架:你可以让它盯邮箱、查资料、写总结,也可以把它接到微信、飞书这类日常聊天工具里,用自然语言给它…

作者头像 李华
网站建设 2026/9/8 15:54:57

ROS机器人-从零开始每日日志记录day11

本周一直在加班,项目能不能如期交付还是个问题...... 本周值得积累和深挖的问题有两个,记录下来方便日后翻阅,也希望能帮到同样在 ROS 路上摸索的朋友。问题一:~/.colcon/defaults.yaml 是什么文件?一句话概括这是 col…

作者头像 李华
网站建设 2026/9/8 15:54:12

单片机毕设选题推荐:基于 STM32 的 Android 蓝牙水产养殖远程监控系统设计与实现 基于 STM32 单片机的养殖定时投喂增氧控制系统设计(012307)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

作者头像 李华
网站建设 2026/9/8 15:52:23

腾讯云AI Skills实战:从设计到部署,构建稳定可用的业务Agent

腾讯云 AI Skills 这个词,最近在 Agent 开发圈子里被频繁提起。我花了两周时间,从读文档到搭出第一个能用的 Agent,再到现在跑在云上给业务干活,中间踩了不少坑,也理清了一些思路。这篇文章不聊虚的,就围绕…

作者头像 李华