本文介绍Paddle 2.1.0版本新功能Paddle.Hub API,可快速加载外部扩展模型。以用PaddleClas预训练模型实现猫的12分类为例,演示同步代码、加载模型列表与模型、预处理数据、训练模型及预测的过程,还提及该版本存在的一些问题。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜
官方文档:直达链接
API 简介:
| API 名称 | API 功能 |
|---|---|
| list | 查看 Repo 支持的模型列表 |
| help | 查看指定模型的文档 |
| load | 加载指定模型 |
# 同步 PaddleClas 代码!git clone https://gitee.com/PaddlePaddle/PaddleClas -b develop --depth 1In [ ]
import paddle# 加载 Repo 中的模型列表model_list = paddle.hub.list('PaddleClas', source='local', force_reload=False)print(model_list)# 查看模型帮助文档model_help = paddle.hub.help('PaddleClas', 'mobilenetv3_large_x1_25', source='local', force_reload=False)print(model_help)# 加载模型model = paddle.hub.load('PaddleClas', 'mobilenetv3_large_x1_25', source='local', force_reload=False)# 模型测试data = paddle.rand((1, 3, 224, 224))
out = model(data)print(out.shape) # [1, 1000]
['alexnet', 'densenet121', 'densenet161', 'densenet169', 'densenet201', 'densenet264', 'googlenet', 'inceptionv3', 'inceptionv4', 'mobilenetv1', 'mobilenetv1_x0_25', 'mobilenetv1_x0_5', 'mobilenetv1_x0_75', 'mobilenetv2_x0_25', 'mobilenetv2_x0_5', 'mobilenetv2_x0_75', 'mobilenetv2_x1_5', 'mobilenetv2_x2_0', 'mobilenetv3_large_x0_35', 'mobilenetv3_large_x0_5', 'mobilenetv3_large_x0_75', 'mobilenetv3_large_x1_0', 'mobilenetv3_large_x1_25', 'mobilenetv3_small_x0_35', 'mobilenetv3_small_x0_5', 'mobilenetv3_small_x0_75', 'mobilenetv3_small_x1_0', 'mobilenetv3_small_x1_25', 'resnet101', 'resnet152', 'resnet18', 'resnet34', 'resnet50', 'resnext101_32x4d', 'resnext101_64x4d', 'resnext152_32x4d', 'resnext152_64x4d', 'resnext50_32x4d', 'resnext50_64x4d', 'shufflenetv2_x0_25', 'squeezenet1_0', 'squeezenet1_1', 'vgg11', 'vgg13', 'vgg16', 'vgg19']
MobileNetV3_large_x1_25
Args:
pretrained: bool=False. If `True`
load pretrained parameters, `False` otherwise.
kwargs:
class_dim: int=1000. Output dim of last fc layer.
Returns:
model: nn.Layer. Specific `MobileNetV3_large_x1_25` model depends on args.
[1, 1000]
!unzip -q -d /home/aistudio/data/data10954 /home/aistudio/data/data10954/cat_12_train.zip!unzip -q -d /home/aistudio/data/data10954 /home/aistudio/data/data10954/cat_12_test.zip
对于一个数据集,首先要了解数据的组成是什么:
对于一个数据集,为了更好的衡量模型的效果,不能只有训练集和测试集,所以一般需要从中训练集中分出一部分作为验证集使用
了解了上述的内容,就可以开始使用代码来对数据集进行预处理了
import osimport paddleimport random
total = []# 读取数据标签with open('/home/aistudio/data/data10954/train_list.txt', 'r', encoding='UTF-8') as f: for line in f: # 格式转换
line = line[:-1].split('\t')
total.append(' '.join(line)+'\n')# 打乱数据顺序random.shuffle(total)'''
切分数据集
95%的数据作为训练集
5%的数据作为验证集
'''split_num = int(len(total)*0.95)
# 写入训练数据列表with open('/home/aistudio/data/data10954/train.txt', 'w', encoding='UTF-8') as f: for line in total[:split_num]:
f.write(line)# 写入验证数据列表with open('/home/aistudio/data/data10954/dev.txt', 'w', encoding='UTF-8') as f: for line in total[split_num:]:
f.write(line)# 写入测试数据列表with open('/home/aistudio/data/data10954/test.txt', 'w', encoding='UTF-8') as f: for line in ['cat_12_test/%s\n' % img for img in os.listdir('/home/aistudio/data/data10954/cat_12_test')]:
f.write(line)
模型训练的一般步骤如下:
注:启动训练前请重启 Notebook 内核
注:目前只有 CPU 环境才可以正常运行如下代码
import osimport paddleimport randomimport paddle.nn as nnimport paddle.vision.transforms as T# 构建数据集class CatDataset(paddle.io.Dataset):
def __init__(self, transforms, dataset_path='/home/aistudio/data/data10954', mode='train'):
self.mode = mode
self.dataset_path = dataset_path
self.transforms = transforms
self.num_classes = 5
if self.mode == 'train':
self.file = 'train.txt'
elif self.mode == 'dev':
self.file = 'dev.txt'
else:
self.file = 'test.txt'
self.file = os.path.join(dataset_path, self.file) with open(self.file, 'r') as file:
self.data = file.read()[:-1].split('\n') def __getitem__(self, idx):
if self.mode in ['train', 'dev']:
img_path, grt = self.data[idx].split(' ')
img_path = os.path.join(self.dataset_path, img_path)
im = paddle.vision.image_load(img_path)
im = im.convert("RGB")
im = self.transforms(im) return im, int(grt) else:
img_path = self.data[idx]
img_path = os.path.join(self.dataset_path, img_path)
im = paddle.vision.image_load(img_path)
im = im.convert("RGB")
im = self.transforms(im) return im def __len__(self):
return len(self.data)# 加载数据集train_transforms = T.Compose([
T.Resize(256),
T.RandomCrop(224),
T.RandomHorizontalFlip(),
T.RandomVerticalFlip(),
T.ToTensor(),
T.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5])
])
test_transforms = T.Compose([
T.Resize(256),
T.CenterCrop(224),
T.ToTensor(),
T.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5])
])
train_dataset = CatDataset(train_transforms, mode='train')
dev_dataset = CatDataset(test_transforms, mode='dev')
test_dataset = CatDataset(test_transforms, mode='test')# 加载模型model = paddle.hub.load('PaddleClas', 'mobilenetv3_large_x0_5', source='local', force_reload=False, class_dim=12, pretrained=True)
model = paddle.Model(model)# 定义优化器opt = paddle.optimizer.Adam(learning_rate=0.001, parameters=model.parameters())# 配置模型model.prepare(optimizer=opt, loss=nn.CrossEntropyLoss(), metrics=paddle.metric.Accuracy(topk=(1, 5)))
model.fit(
train_data=train_dataset,
eval_data=dev_dataset,
batch_size=32,
epochs=2,
eval_freq=1,
log_freq=1,
save_dir='save_models',
save_freq=1,
verbose=1,
drop_last=False,
shuffle=True,
num_workers=0)
2025-05-18 12:43:59 INFO: unique_endpoints {''}
2025-05-18 12:43:59 INFO: Downloading MobileNetV3_large_x0_5_pretrained.pdparams from https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_large_x0_5_pretrained.pdparams
100%|██████████| 15875/15875 [00:00<00:00, 18983.36it/s]
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/layers.py:1297: UserWarning: Skip loading for out.weight. out.weight receives a shape [1280, 1000], but the expected shape is [1280, 12].
warnings.warn(("Skip loading for {}. ".format(key) + str(err)))
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/layers.py:1297: UserWarning: Skip loading for out.bias. out.bias receives a shape [1000], but the expected shape is [12].
warnings.warn(("Skip loading for {}. ".format(key) + str(err)))
The loss value printed in the log is the current step, and the metric is the average value of previous steps. Epoch 1/2
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/layers/utils.py:77: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working return (isinstance(seq, collections.Sequence) and
step 65/65 [==============================] - loss: 2.7684 - acc_top1: 0.6628 - acc_top5: 0.9464 - 3s/step save checkpoint at /home/aistudio/save_models/0 Eval begin... step 4/4 [==============================] - loss: 0.8948 - acc_top1: 0.7685 - acc_top5: 0.9907 - 732ms/step Eval samples: 108 Epoch 2/2 step 65/65 [==============================] - loss: 0.5738 - acc_top1: 0.8397 - acc_top5: 0.9942 - 3s/step save checkpoint at /home/aistudio/save_models/1 Eval begin... step 4/4 [==============================] - loss: 0.5484 - acc_top1: 0.8611 - acc_top5: 0.9907 - 779ms/step Eval samples: 108 save checkpoint at /home/aistudio/save_models/final
模型预测一般步骤:
import numpy as np# 模型预测results = model.predict(test_dataset, batch_size=32, num_workers=0, stack_outputs=True, callbacks=None)# 对预测结果进行后处理total = []for img, result in zip(test_dataset.data, np.argmax(results[0], 1)):
total.append('%s,%s\n' % (img.split('/')[-1], result))# 生成结果文件with open('result.csv','w') as f: for line in total:
f.write(line)
Predict begin... step 8/8 [==============================] - 805ms/step Predict samples: 240
# 重启
# 切分
# 是个
# 测试数据
# 后处理
# 访问速度
# 比较慢
# 就可以
# 文档
# python
# 加载
# gitee
# issue
# bug
# github
# red
# ai
# git
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化91478 】
【
技术知识72672 】
【
云计算0 】
【
GEO优化84317 】
【
优选文章0 】
【
营销推广36048 】
【
网络运营41350 】
【
案例网站102563 】
【
AI智能45237 】
相关推荐:
千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】
Midjourney怎样加元素词丰富画面_Midjourney元素词技巧【方法】
探索心灵的音乐之旅:Kanwar Garewal的《Ishq Bulleh Nu》
如何用AI一键生成求职简历?AI简历优化与制作工具推荐【干货】
Artist.ly AI Image Designer: 终极指南
播客数据深度分析:揭秘全球听众分布及增长策略
AI Lead Generation: 解锁未来增长引擎,营销新纪元
如何使用 DeepSeek API 构建低成本智能应用
AI伴侣:连接还是孤独?真实对话揭秘AI伦理困境
AI视频创作终极指南:文本到视频的免费工具与技巧
Filmora 13 AI音乐生成器:创意视频配乐新纪元
Gemini 与 Google Drive 结合的文件智能检索
Claude如何关闭自动续费_Claude续费关闭方法【方法】
Z170芯片组内存兼容性问题终极指南
AI写作鱼怎么一键生成论文大纲_AI写作鱼大纲生成与逻辑梳理【技巧】
开源AI Agent项目精选:赋能智能自动化
AI内容检测与优化:免费工具助你提升内容质量
百度AI助手网页版入口 免安装直接打开入口
Gamma做年终总结PPT怎么用_Gamma做年终总结PPT使用方法详细指南【教程】
斑马AI怎样设置专注模式_斑马AI专注时段与干扰屏蔽【指南】
人工智能时代:你需要知道的真相和未来趋势
ChatGPT一键生成PPT怎么加动画_ChatGPTPPT动画添加【指南】
Google AI Studio:免费AI视频生成器使用指南
旅游营销AI:ChatGPT邮件营销策略,提升旅游业务转化率
通义万相做海报怎么用_通义万相做海报使用方法详细指南【教程】
千问能否生成多语言年终总结_千问多语言翻译与本地化调整【攻略】
如何通过 DeepSeek 优化分布式存储系统架构
AI论文写作终极指南:DeepSeek与HIX Bypass结合使用教程
老电脑焕新:i5-2400搭配FirePro V5900 打造复古游戏利器
Midjourney怎样加风格词调质感_Midjourney风格词技巧【指南】
百度输入法智能预测怎么关 百度输入法ai联想词关闭
智谱AI智能绘图怎么用_智谱AI智能绘图使用方法详细指南【教程】
豆包AI怎么评价回答的好坏_点赞与反馈功能使用教程
5分钟搞定求职信:利用AI工具大幅提升求职效率的实操技巧
AI动画制作终极指南:让你的图片和人物栩栩如生
EdrawMax全面评测:使用AI轻松绘制流程图和思维导图
Removebg怎样快速抠图_Removebg上传图片与自动抠图步骤【教程】
人脸识别的伦理困境:Massive Attack的演出引发的思考
如何用AI自动生成Python代码 AI编程助手ChatGPT使用方法【教程】
豆包AI怎样生成PPT目录页_豆包AI目录自动生成与页码添加【指南】
可灵ai怎么生成招聘JD文案_可灵aiJD生成要素与岗位描述优化【技巧】
AI员工工具详解:添加与移除指南,提升效率
Depseek怎么生成员工成长总结_Depseek成长维度提取与案例整合【方法】
v0 Report深度测评:AI文档生成器的优缺点分析与实用指南
雷小兔ai智能写作如何生成文案_雷小兔ai智能写作文案生成场景选择【攻略】
稿定设计AI抠图怎样调整透明度_稿定设计AI透明度滑块与渐变设置【攻略】
Motion 教程:AI 驱动的智能日程安排,提高工作效率
解读Childish Gambino《This Is America》的深层含义与文化影响
AI Buildr: 构建 AI 应用的终极指南
AI自动化工作流:Zapier提升效率,优化工作流程
2025-07-24
南京市珐之弘网络技术有限公司专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。