使用PaddlePaddle2.0高层API完成基于VGG16的图像分类任务


本文介绍如何用PaddlePaddle2.0高层API,基于VGG16完成Cifar10图像分类任务。包括利用高层API简化模型组网与训练,加载VGG16网络并查看结构,加载Cifar10数据集及数据增强,还讲解了用高层API进行模型训练、验证与测试的过程,最后提及使用时的注意事项。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

使用paddlepaddle2.0高层api完成基于vgg16的图像分类任务 -

使用PaddlePaddle2.0高层API完成基于VGG16的图像分类任务

本示例教程将会演示如何使用飞桨的卷积神经网络来完成目标检测任务。这是一个较为简单的示例,将会使用飞桨框架内置模型VGG16网络完成Cifar10数据集的图像分类任务。

一、PaddlePaddle2.0新亮点——高层API助力开发者快速上手深度学习

飞桨致力于让深度学习技术的创新与应用更简单

1.模型组网更简单

对于新手来说,完全可以省去以往复杂的组网代码,一行代码便可以完成组网。

目前PaddlePaddle2.0-rc1的内置模型有:

'ResNet', 'resnet18', 'resnet34', 'resnet50', 'resnet101', 'resnet152', 'VGG', 'vgg11', 'vgg13', 'vgg16', 'vgg19', 'MobileNetV1', 'mobilenet_v1', 'MobileNetV2', 'mobilenet_v2', 'LeNet'

使用一行代码便可以加载:

ModelName = paddle.vision.models.ModelName()
       

(将ModelName替换成上面的模型名称即可,模型名称后面别忘了加括号!!!)

2.模型训练更简单

PaddlePaddle2.0-rc1增加了paddle.Model高层API,大部分任务可以使用此API用于简化训练、评估、预测类代码开发。

使用两句代码便可以训练模型:

# 训练前准备ModelName.prepare(
    paddle.optimizer.Adam(learning_rate=0.001, parameters=model.parameters()),
    paddle.nn.CrossEntropyLoss(),
    paddle.metric.Accuracy(topk=(1, 2))
    )

# 启动训练ModelName.fit(train_dataset, epochs=2, batch_size=64, log_freq=200)
   

二、使用飞桨快速加载VGG网络并查看模型结构

Very Deep Convolutional Networks For Large-Scale Image Recognition 论文地址:https://arxiv.org/pdf/1409.1556.pdf

1.查看飞桨框架内置模型

In [ ]
import paddleprint('飞桨框架内置模型:', paddle.vision.models.__all__)
       
飞桨框架内置模型: ['ResNet', 'resnet18', 'resnet34', 'resnet50', 'resnet101', 'resnet152', 'VGG', 'vgg11', 'vgg13', 'vgg16', 'vgg19', 'MobileNetV1', 'mobilenet_v1', 'MobileNetV2', 'mobilenet_v2', 'LeNet']
       

2.一行代码加载VGG16

In [ ]
vgg16 = paddle.vision.models.vgg16()
   

3.查看VGG16的网络结构及参数

In [ ]
paddle.summary(vgg16, (64, 3, 32, 32))
       
-------------------------------------------------------------------------------
   Layer (type)         Input Shape          Output Shape         Param #    
===============================================================================
     Conv2D-1        [[64, 3, 32, 32]]     [64, 64, 32, 32]        1,792     
      ReLU-1         [[64, 64, 32, 32]]    [64, 64, 32, 32]          0       
     Conv2D-2        [[64, 64, 32, 32]]    [64, 64, 32, 32]       36,928     
      ReLU-2         [[64, 64, 32, 32]]    [64, 64, 32, 32]          0       
    MaxPool2D-1      [[64, 64, 32, 32]]    [64, 64, 16, 16]          0       
     Conv2D-3        [[64, 64, 16, 16]]   [64, 128, 16, 16]       73,856     
      ReLU-3        [[64, 128, 16, 16]]   [64, 128, 16, 16]          0       
     Conv2D-4       [[64, 128, 16, 16]]   [64, 128, 16, 16]       147,584    
      ReLU-4        [[64, 128, 16, 16]]   [64, 128, 16, 16]          0       
    MaxPool2D-2     [[64, 128, 16, 16]]    [64, 128, 8, 8]           0       
     Conv2D-5        [[64, 128, 8, 8]]     [64, 256, 8, 8]        295,168    
      ReLU-5         [[64, 256, 8, 8]]     [64, 256, 8, 8]           0       
     Conv2D-6        [[64, 256, 8, 8]]     [64, 256, 8, 8]        590,080    
      ReLU-6         [[64, 256, 8, 8]]     [64, 256, 8, 8]           0       
     Conv2D-7        [[64, 256, 8, 8]]     [64, 256, 8, 8]        590,080    
      ReLU-7         [[64, 256, 8, 8]]     [64, 256, 8, 8]           0       
    MaxPool2D-3      [[64, 256, 8, 8]]     [64, 256, 4, 4]           0       
     Conv2D-8        [[64, 256, 4, 4]]     [64, 512, 4, 4]       1,180,160   
      ReLU-8         [[64, 512, 4, 4]]     [64, 512, 4, 4]           0       
     Conv2D-9        [[64, 512, 4, 4]]     [64, 512, 4, 4]       2,359,808   
      ReLU-9         [[64, 512, 4, 4]]     [64, 512, 4, 4]           0       
     Conv2D-10       [[64, 512, 4, 4]]     [64, 512, 4, 4]       2,359,808   
      ReLU-10        [[64, 512, 4, 4]]     [64, 512, 4, 4]           0       
    MaxPool2D-4      [[64, 512, 4, 4]]     [64, 512, 2, 2]           0       
     Conv2D-11       [[64, 512, 2, 2]]     [64, 512, 2, 2]       2,359,808   
      ReLU-11        [[64, 512, 2, 2]]     [64, 512, 2, 2]           0       
     Conv2D-12       [[64, 512, 2, 2]]     [64, 512, 2, 2]       2,359,808   
      ReLU-12        [[64, 512, 2, 2]]     [64, 512, 2, 2]           0       
     Conv2D-13       [[64, 512, 2, 2]]     [64, 512, 2, 2]       2,359,808   
      ReLU-13        [[64, 512, 2, 2]]     [64, 512, 2, 2]           0       
    MaxPool2D-5      [[64, 512, 2, 2]]     [64, 512, 1, 1]           0       
AdaptiveAvgPool2D-1  [[64, 512, 1, 1]]     [64, 512, 7, 7]           0       
     Linear-1          [[64, 25088]]          [64, 4096]        102,764,544  
      ReLU-14           [[64, 4096]]          [64, 4096]             0       
     Dropout-1          [[64, 4096]]          [64, 4096]             0       
     Linear-2           [[64, 4096]]          [64, 4096]        16,781,312   
      ReLU-15           [[64, 4096]]          [64, 4096]             0       
     Dropout-2          [[64, 4096]]          [64, 4096]             0       
     Linear-3           [[64, 4096]]          [64, 1000]         4,097,000   
===============================================================================
Total params: 138,357,544
Trainable params: 138,357,544
Non-trainable params: 0
-------------------------------------------------------------------------------
Input size (MB): 0.75
Forward/backward pass size (MB): 309.99
Params size (MB): 527.79
Estimated Total Size (MB): 838.53
-------------------------------------------------------------------------------
       
{'total_params': 138357544, 'trainable_params': 138357544}
               

三、使用飞桨框架API加载数据集

飞桨框架将一些我们常用到的数据集作为领域API对用户进行开放,对应API所在目录为paddle.vision.datasets与paddle.text.datasets

目前已经收录的数据集有:

视觉相关数据集: ['DatasetFolder', 'ImageFolder', 'MNIST', 'FashionMNIST', 'Flowers', 'Cifar10', 'Cifar100', 'VOC2012']

自然语言相关数据集: ['Conll05st', 'Imdb', 'Imikolov', 'Movielens', 'UCIHousing', 'WMT14', 'WMT16']

简小派 简小派

简小派是一款AI原生求职工具,通过简历优化、岗位匹配、项目生成、模拟面试与智能投递,全链路提升求职成功率,帮助普通人更快拿到更好的 offer。

简小派 123 查看详情 简小派

1.快速加载数据集

使用一行代码即可加载数据集到本机缓存目录~/.cache/paddle/dataset:

paddle.vision.datasets.DataSetName()

将DataSetName替换成上述数据集名称即可,别忘了名称后面跟一个小括号!

In [ ]
from paddle.vision.transforms import ToTensor# 训练数据集 用ToTensor将数据格式转为Tensortrain_dataset = paddle.vision.datasets.Cifar10(mode='train', transform=ToTensor())# 验证数据集val_dataset = paddle.vision.datasets.Cifar10(mode='test', transform=ToTensor())
   

2.对训练数据做数据增强

训练过程中有时会遇到过拟合的问题,其中一个解决方法就是对训练数据做增强,对数据进行处理得到不同的图像,从而泛化数据集。

查看飞桨框架提供的数据增强方法:

In [ ]
import paddleprint('数据处理方法:', paddle.vision.transforms.__all__)
       
数据处理方法: ['BaseTransform', 'Compose', 'Resize', 'RandomResizedCrop', 'CenterCrop', 'RandomHorizontalFlip', 'RandomVerticalFlip', 'Transpose', 'Normalize', 'BrightnessTransform', 'SaturationTransform', 'ContrastTransform', 'HueTransform', 'ColorJitter', 'RandomCrop', 'Pad', 'RandomRotation', 'Grayscale', 'ToTensor', 'to_tensor', 'hflip', 'vflip', 'resize', 'pad', 'rotate', 'to_grayscale', 'crop', 'center_crop', 'adjust_brightness', 'adjust_contrast', 'adjust_hue', 'normalize']
        In [ ]
from paddle.vision.transforms import Compose, Resize, ColorJitter, ToTensor, RandomHorizontalFlip, RandomVerticalFlip, RandomRotationimport numpy as npfrom PIL import Image# 定义想要使用那些数据增强方式,这里用到了随机调整亮度、对比度和饱和度、图像翻转等transform = Compose([ColorJitter(), RandomHorizontalFlip(), ToTensor()])# 通过transform参数传递定义好的数据增项方法即可完成对自带数据集的应用train_dataset = paddle.vision.datasets.Cifar10(mode='train', transform=transform)# 验证数据集val_dataset = paddle.vision.datasets.Cifar10(mode='test', transform=transform)
   

这里需要注意的坑是,一定要把ToTensor()放在最后,否则会报错

检查数据集:

In [ ]
train_loader = paddle.io.DataLoader(train_dataset, batch_size=64, shuffle=True)for batch_id, data in enumerate(train_loader()):
    x_data = data[0]
    y_data = data[1]    breakprint(x_data.numpy().shape)print(y_data.numpy().shape)
       
(64, 3, 32, 32)
(64,)
       

四、使用高层API进行模型训练、验证与测试

飞桨框架提供了两种训练与预测的方法:

  • 一种是用paddle.Model对模型进行封装,通过高层API如Model.fit()、Model.evaluate()、Model.predict()等完成模型的训练与预测;
  • 另一种就是基于基础API常规的训练方式。

使用高层API只需要改动少量参数即可完成模型训练,对新手小白真的特别友好!

1.调用fit()接口来启动训练过程

In [26]
import paddlefrom paddle.vision.transforms import ToTensorfrom paddle.vision.models import vgg16# build modelmodel = vgg16()# build vgg16 model with batch_normmodel = vgg16(batch_norm=True)# 使用高层API——paddle.Model对模型进行封装model = paddle.Model(model)# 为模型训练做准备,设置优化器,损失函数和精度计算方式model.prepare(optimizer=paddle.optimizer.Adam(parameters=model.parameters()),
                    loss=paddle.nn.CrossEntropyLoss(),
                    metrics=paddle.metric.Accuracy())# 启动模型训练,指定训练数据集,设置训练轮次,设置每次数据集计算的批次大小,设置日志格式model.fit(train_dataset,
          epochs=10,
          batch_size=256,
          s*e_dir="vgg16/",
          s*e_freq=10,
          verbose=1)
       
The loss value printed in the log is the current step, and the metric is the *erage value of previous step.
Epoch 1/10
step 196/196 [==============================] - loss: 2.3752 - acc: 0.1054 - 202ms/step        
s*e checkpoint at /home/aistudio/vgg16/0
Epoch 2/10
step 196/196 [==============================] - loss: 2.2819 - acc: 0.1114 - 203ms/step        
Epoch 3/10
step 196/196 [==============================] - loss: 2.2614 - acc: 0.1306 - 201ms/step        
Epoch 4/10
step 196/196 [==============================] - loss: 2.2229 - acc: 0.1822 - 195ms/step        
Epoch 5/10
step 196/196 [==============================] - loss: 1.9132 - acc: 0.1846 - 198ms/step        
Epoch 6/10
step 196/196 [==============================] - loss: 1.7738 - acc: 0.2000 - 194ms/step        
Epoch 7/10
step 196/196 [==============================] - loss: 1.8450 - acc: 0.2286 - 195ms/step        
Epoch 8/10
step 196/196 [==============================] - loss: 1.5770 - acc: 0.2782 - 198ms/step        
Epoch 9/10
step 196/196 [==============================] - loss: 1.5743 - acc: 0.3446 - 195ms/step        
Epoch 10/10
step 196/196 [==============================] - loss: 1.4283 - acc: 0.4043 - 201ms/step        
s*e checkpoint at /home/aistudio/vgg16/final
       

看到loss在明显下降、acc在明显上升,说明模型效果还不错,剩下需要慢慢调参优化

2.调用evaluate()在测试集上对模型进行验证

对于训练好的模型进行评估操作可以使用evaluate接口来实现,事先定义好用于评估使用的数据集后,可以简单的调用evaluate接口即可完成模型评估操作,结束后根据prepare中loss和metric的定义来进行相关评估结果计算返回。

In [27]
# 用 evaluate 在测试集上对模型进行验证eval_result = model.evaluate(val_dataset, verbose=1)
       
Eval begin...
The loss value printed in the log is the current batch, and the metric is the *erage value of previous step.
step 10000/10000 [==============================] - loss: 0.2509 - acc: 0.4379 - 10ms/step         
Eval samples: 10000
       

3.调用predict()接口进行模型测试

高层API中提供了predict接口来方便用户对训练好的模型进行预测验证,只需要基于训练好的模型将需要进行预测测试的数据放到接口中进行计算即可,接口会将经过模型计算得到的预测结果进行返回。

In [28]
# 用 predict 在测试集上对模型进行测试test_result = model.predict(val_dataset)
       
Predict begin...
step 10000/10000 [==============================] - 10ms/step         
Predict samples: 10000
       

五、总结与展望——PaddlePaddle2.0 rc1入手指南

给大家总结一下我在使用PaddlePaddle2.0 rc1时遇到的坑,希望大家可以避免:

  • 1.这个项目本来是使用VOC2012数据集进行目标检测任务的训练的,奈何VOC2012数据集的下载速度实在是太慢了,所以我果断放弃,希望后期可以找到解决办法
  • 2.最好结合PaddlePaddle2.0的文档和GitHub上的源码来使用,特别是新手小白,不然出现一些报错可能会很难解决,可以多去GitHub上提issue
  • 3.使用数据增强 Compose()方法时,切记!一定要把ToTensor()放在最后,这个问题看看源码就能解决

以上就是使用PaddlePaddle2.0高层API完成基于VGG16的图像分类任务的详细内容,更多请关注其它相关文章!


# 只需要  # 精英关键词排名管理工具  # 莆田百度关键词排名代理  # 品牌产品推广营销话术  # 看seo看seo  # 店铺网站建设咨询热线  # 武汉微商网站推广  # 企业网站获客推广案例范文  # 系部 网站建设方案  # 攀枝花做推广的网站  # 邵阳网站优化方案  # 别忘了  # 可以使用  # git  # 数据处理  # 中文网  # 将会  # 放在  # 便可  # 加载  # type  # etna  # udio  # red  # 解决方法  # ai 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 2025“春晖杯”人工智能专场对接活动举办  构建AI绘画网站的方法:使用API接口和调用步骤  网易加速行业AI大模型应用,将覆盖100多个应用场景  华为4G5G通信物联网收费标准公布,多年研发成果,十年花费近万亿  云南首例达芬奇机器人微创心脏手术成功开展  本届人工智能大会上的这个“镇馆之宝”,来自长宁企业西井科技!  不到2S创作AI图像!Snap发布图像生成器SnapFusion  AIGC 风潮刮到游戏产业,巨人网络与阿里云达成“游戏 +AI ”合作  苹果在韩举办首届中小企业智能制造论坛,加速推动工业4.0发展  阿里云推出通义万相AI绘画大模型  复旦发布「新闻推荐生态系统模拟器」SimuLine:单机支持万名读者、千名创作者、100+轮次推荐  爱设计 AI 一键生成 PPT 工具上线:输入标题即可生成 PPT  有远见!华为四年前注册商标Vision Pro:苹果AR国内要改名  彬州市第三届青少年机器人创新大赛成功举办  一文看懂被英伟达看中的九号机器人移动底盘  热点 | 人工智能黄金时代开启  喜马拉雅在国际会议挑战赛中突破语音重叠难题斩获第一 加速AI创新  如何利用物联网技术提高企业生产线智能化水平,提升生产效率  当科幻走进现实 脑机接口新技术能为生活带来哪些惊喜?  今年,全球客服中心支出将增长 16.2%,迎接对话式 AI 的浪潮,根据 Gartner 报告  泗洪:畅通城市“血管” ,管下机器人来帮忙  五个IntelliJ IDEA插件,高效编写代码  OpenAI宣布在伦敦设立海外分部,要招揽“世界级人才”  GPT-4使用混合大模型?研究证明MoE+指令调优确实让大模型性能超群  对话式论文阅读工具PaperMate上线,综述细节AI告诉你  腾讯机器狗进化:通过深度学习掌握自主决策能力  618京东3C数码趋势产品备受青睐 AR设备成交额同比增长15倍  谷歌将使用公开信息训练 AI 模型,构建更强大的自家产品  马斯克发推讽刺人工智能,机器学习本质是统计?  OpenAI限制网络爬虫访问以保护数据免被用于AI模型训练  探索人工智能和物联网的动态融合  GPT-4成功战胜AI-Guardian审核系统:谷歌研究团队的人工智能抵抗人工智能  令人震惊的特斯拉机器人  掌阅科技申请阅爱聊商标 掌阅科技申请AI相关商标  OpenOOD更新v1.5:全面、精确的分布外检测代码库及测试平台,支持在线排行榜、一键测试  1.6亿美元收购Singularity AI,昆仑万维布局通用人工智能  上天下海登极,青岛与昇腾AI握手一起探索星辰大海  微盟宣布联合腾讯云共建行业大模型:加快激活AI大模型智能应用  杀入生成式AI的亚马逊云科技,能否再次生成未来?  央视报道车载人机交互技术!MWC上海魅族表现亮眼,现场热火朝天  人工智能时代 数字文明对话向“尼”走来  马斯克的幽默“现实”:AR眼镜与20美元“增强现实”哪个真实?  这款在《自然通讯》发表的机器人,为变形金刚来到现实创造可能性  软通动力天枢元宇宙研究院签约落户江宁高新区  世界人工智能大会高合发表演讲,HiPhi Y即将全球上市  联想首发AI PC于今年秋季,英特尔CEO确认AI PC时代来临  定义人工智能的十个关键术语  云深处与昇腾CANN携手合作:开设ROS四足机器狗开发训练营  百亿量化私募:量化投资进入“精耕细作”时代 AI带来行业新变革  中国气象局预测:到 2030 年,中国人工智能气象应用将达到国际领先水平 

 2025-07-23

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.