恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
PyTorch 图像分类实战:把 FoodVision 从训练循环跑进 Gradio 的 5 个环节
首页
资讯中心
/
PyTorch 图像分类实战:把 FoodVision 从训练循环跑进 Gradio 的 5 个环节
PyTorch 图像分类实战:把 FoodVision 从训练循环跑进 Gradio 的 5 个环节
发布时间:2026/9/8 15:57:06
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 是不是分成了两个 DataLoadertransform 是不是同一套。上回有同事把测试集也shuffleTrue了训练时指标漂亮一到评估就掉——这不是模型问题是数据管道的问题。这个仓库pytorch-deep-learning本身就是按数据 → 训练 → 模型 → 迁移 → 上线的顺序组织的下面照着这条真实落地链路走一遍每个环节只讲这一步该干什么、为什么这么干。加载 FoodVisiontrain 和 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 开 shuffletest 关 shuffle这是唯一该改的地方 train_dl, test_dl, class_names create_dataloaders( train_dirdata/pizza_steak_sushi/train, test_dirdata/pizza_steak_sushi/test, transformtransform, batch_size32, )这段代码解决的是两条数据流怎么隔离。细节都在 数据加载函数 里你只需要保证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_step和test_step再套一层train跑多个 epoch逻辑和 训练循环实现 完全一致直接 import 就行不用自己重写。用 EfficientNet 特征提取器省掉从头训练数据量小的时候从头训一个 CNN 往往又慢又不过拟合。更省事的打法是迁移学习拿一个在 ImageNet 上预训练好的特征提取器把它的分类头砍掉换成你自己 101 类的分类头然后把特征层全部冻结。import timm feature_extractor timm.create_model(hf_hub:timm/efficientnet_b2, pretrainedTrue, num_classes0) # 0 表示去掉原分类头 for p in feature_extractor.parameters(): p.requires_grad False # 冻结只训新加的分类头num_classes0是关键参数它直接让模型只输出特征、不带分类头你后面接自己的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, dim1).item() demo gr.Interface(fnpredict, inputsgr.Image(typenumpy), outputsgr.Label(num_top_classes3)) 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),仅供参考