PaddlePaddle升级解读|十余行代码完成迁移学习 PaddleHub实战篇

centos:安装paddlehub详细教程 阅读详情

迁移学习 (Transfer Learning) 是属于深度学习的一个子研究领域,该研究领域的目标在于利用数据、任务、或模型之间的相似性,将在旧领域学习过的知识,迁移应用于新领域中。迁移学习吸引了很多研究者投身其中,因为它能够很好的解决深度学习中的以下几个问题:

  一些研究领域只有少量标注数据,且数据标注成本较高,不足以训练一个足够鲁棒的神经网络

  大规模神经网络的训练依赖于大量的计算资源,这对于一般用户而言难以实现

  应对于普适化需求的模型,在特定应用上表现不尽如人意

  为了让开发者更便捷地应用迁移学习,百度 PaddlePaddle 开源了预训练模型管理工具 PaddleHub。开发者用使用仅仅十余行的代码,就能完成迁移学习。本文将全面介绍 PaddleHub 及其应用方法。

  项目地址:https://github.com/PaddlePaddle/PaddleHub

PaddleHub 介绍

  PaddleHub 是基于 PaddlePaddle 开发的预训练模型管理工具,可以借助预训练模型更便捷地开展迁移学习工作,旨在让 PaddlePaddle 生态下的开发者更便捷体验到大规模预训练模型的价值。

  PaddleHub 目前的预训练模型覆盖了图像分类、目标检测、词法分析、Transformer、情感分析五大类别。未来会持续开放更多类型的深度学习模型,如语言模型、视频分类、图像生成等预训练模型。

C:\Users\lingmiao.yan\Desktop\微信图片_20190506161248.jpg

图 1 PaddleHub 功能全景

  PaddleHub 主要包括两个功能:命令行工具和 Fine-tune API。

命令行工具

  PaddleHub 借鉴了 Anaconda 和 PIP 等软件包管理的理念,开发了命令行工具,可以方便快捷的完成模型的搜索、下载、安装、预测等功能,对应的关键的命令分别是 search,download,install,run 等。我们以 run 命令为例,介绍如何通过命令行工具进行预测。

  Run 命令用于执行 Module 的预测,这里分别举一个 NLP 和 CV 的例子。

  对于 NLP 任务:输入数据通过--input_text 指定。以百度 LAC 模型(中文词法分析)为例,可以通过以下命令实现单行文本分析。

  对于 CV 任务:输入数据通过--input_path 指定。以 SSD 模型(单阶段目标检测)为例子,可以通过以下命令实现单张图片的预测。

  更多的命令用法,请读者参考文首的 Github 项目链接。

Fine-tune API

  PaddleHub 提供了基于 PaddlePaddle 实现的 Fine-tune API, 重点针对大规模预训练模型的 Fine-tune 任务做了高阶的抽象,让预训练模型能更好服务于用户特定场景的应用。通过大规模预训练模型结合 Fine-tune,可以在更短的时间完成模型的收敛,同时具备更好的泛化能力。

C:\Users\lingmiao.yan\Desktop\微信图片_20190506161733_副本.jpg

图 2 PaddleHub Fine-tune API 全景

  Fine-tune :对一个 Task 进行 Fine-tune,并且定期进行验证集评估。在 Fine-tune 的过程中,接口会定期的保存 checkpoint(模型和运行数据),当运行被中断时,通过 RunConfig 指定上一次运行的 checkpoint 目录,可以直接从上一次运行的最后一次评估中恢复状态继续运行。

  迁移任务 Task:在 PaddleHub 中,Task 代表了一个 Fine-tune 的任务。任务中包含了执行该任务相关的 program 以及和任务相关的一些度量指标(如分类准确率 accuracy、precision、 recall、 F1-score 等)、模型损失等。

  运行配置 RunConfig:在 PaddleHub 中,RunConfig 代表了在对 Task 进行 Fine-tune 时的运行配置。包括运行的 epoch 次数、batch 的大小、是否使用 GPU 训练等。

  优化策略 Strategy:在 PaddleHub 中,Strategy 类封装了一系列适用于迁移学习的 Fine-tune 策略。Strategy 包含了对预训练参数使用什么学习率变化策略,使用哪种类型的优化器,使用什么类型的正则化等。

  预训练模型 Module :Module 代表了一个可执行的模型。这里的可执行指的是,Module 可以直接通过命令行 hub run ${MODULE_NAME} 执行预测,或者通过 context 接口获取上下文后进行 Fine-tune。在生成一个 Module 时,支持通过名称、url 或者路径创建 Module。

  数据预处理 Reader :PaddleHub 的数据预处理模块 Reader 对常见的 NLP 和 CV 任务进行了抽象。

  数据集 Dataset:PaddleHub 提供多种 NLP 任务和 CV 任务的数据集,可供用户载,用户也可以在自定义数据集上完成 Fine-tune。

  基于以上介绍的 PaddleHub 两大功能,用户可以实现:无需编写代码,一键使用预训练模型进行预测;通过 hub download 命令,快速地获取 PaddlePaddle 生态下的所有预训练模型;借助 PaddleHub Fine-tune API,使用少量代码完成迁移学习。

  以下将从实战角度,教你如何使用 PaddleHub 进行图像分类迁移。

PaddleHub 实战

  1. 安装

  PaddleHub 是基于 PaddlePaddle 的预训练模型管理框架,使用 PaddleHub 前需要先安装 PaddlePaddle,如果你本地已经安装了 CPU 或者 GPU 版本的 PaddlePaddle,那么可以跳过以下安装步骤。

  推荐使用大于 1.4.0 版本的 PaddlePaddle。

  通过以下命令来安装 PaddleHub。

  2. 选择合适的模型

  首先导入必要的 python 包

  接下来我们要在 PaddleHub 中选择合适的预训练模型来 Fine-tune,由于猫狗分类是一个图像分类任务,因此我们使用经典的 ResNet-50 作为预训练模型。PaddleHub 提供了丰富的图像分类预训练模型,包括了最新的神经网络架构搜索类的 PNASNet,我们推荐你尝试不同的预训练模型来获得更好的性能。

  3. 数据准备

  接着需要加载图片数据集。为了快速体验,我们直接加载 PaddleHub 提供的猫狗分类数据集,如果想要使用自定义的数据进行体验,请查看自定义数据。

  4. 自定义数据

  本节说明如何组装自定义的数据,如果想使用猫狗数据集进行体验,可以直接跳过本节。使用自定义数据时,我们需要自己切分数据集,将数据集且分为训练集、验证集和测试集。

  同时使用三个文本文件来记录对应的图片路径和标签,此外还需要一个标签文件用于记录标签的名称。

  训练/验证/测试集的数据列表文件的格式如下

  标签列表文件的格式如下

  使用如下的方式进行加载数据,生成数据集对象

  注意事项:

  1、num_labels 要填写实际的分类数量,如猫狗分类该字段值为 2,food101 该字段值为 101,下文以 2 为例子

  2、base_path 为数据集实际路径,需要填写全路径,下文以/test/data 为例子

  3、训练/验证/测试集的数据列表文件中的图片路径需要相对于 base_path 的相对路径,例如图片的实际位置为/test/data/dog/dog1.jpg,base_path 为/test/data,则文件中填写的路径应该为 dog/dog1.jpg

      5. 生成 Reader

  接着生成一个图像分类的 reader,reader 负责将 dataset 的数据进行预处理,接着以特定格式组织并输入给模型进行训练。

  当我们生成一个图像分类的 reader 时,需要指定输入图片的大小

     6. 组建 Fine-tune Task

  有了合适的预训练模型和准备要迁移的数据集后,我们开始组建一个 Task。

  由于猫狗分类是一个二分类的任务,而我们下载的 cv_classifer_module 是在 ImageNet 数据集上训练的千分类模型,所以我们需要对模型进行简单的微调,把模型改造为一个二分类模型:

  1、获取 cv_classifer_module 的上下文环境,包括输入和输出的变量,以及 Paddle Program;

  2、从输出变量中找到特征图提取层 feature_map;

  3、在 feature_map 后面接入一个全连接层,生成 Task;

  7. 选择运行时配置

  在进行 Fine-tune 前,我们可以设置一些运行时的配置,例如如下代码中的配置,表示:

  use_cuda:设置为 False 表示使用 CPU 进行训练。如果本机支持 GPU,且安装的是 GPU 版本的 PaddlePaddle,我们建议你将这个选项设置为 True;

  epoch:要求 Fine-tune 的任务只遍历 1 次训练集;

  batch_size:每次训练的时候,给模型输入的每批数据大小为 32,模型训练时能够并行处理批数据,因此 batch_size 越大,训练的效率越高,但是同时带来了内存的负荷,过大的 batch_size 可能导致内存不足而无法训练,因此选择一个合适的 batch_size 是很重要的一步;

  log_interval:每隔 10 step 打印一次训练日志;

  eval_interval:每隔 50 step 在验证集上进行一次性能评估;

  checkpoint_dir:将训练的参数和数据保存到 cv_Fine-tune_turtorial_demo 目录中;

  strategy:使用 DefaultFine-tuneStrategy 策略进行 Fine-tune;

  更多运行配置,请查看文首的 Github 项目链接。

       8. 开始 Fine-tune

  我们选择 Fine-tune_and_eval 接口来进行模型训练,这个接口在 Fine-tune 的过程中,会周期性的进行模型效果的评估,以便我们了解整个训练过程的性能变化。

      9. 查看训练过程的效果

  训练过程中的性能数据会被记录到本地,我们可以通过 visualdl 来可视化这些数据。

  我们在 shell 中输入以下命令来启动 visualdl,其中${HOST_IP} 为本机 IP,需要用户自行指定

  启动服务后,我们使用浏览器访问${HOST_IP}:8989,可以看到训练以及预测的 loss 曲线和 accuracy 曲线,如下图所示。

C:\Users\lingmiao.yan\Desktop\微信图片_20190506164323.jpg

       10. 使用模型进行预测

  当 Fine-tune 完成后,我们使用模型来进行预测,整个预测流程大致可以分为以下几步:

  1、构建网络

  2、生成预测数据的 Reader

  3、切换到预测的 Program

  4、加载预训练好的参数

  5、运行 Program 进行预测

  通过以下命令来获取测试的图片(适用于猫狗分类的数据集)

  注意:其他数据集所用的测试图片请自行准备。

  完整预测代码如下:

Python利用paddlehub实现批量抠图和更换证件照背景底色 Python利用paddlehub实现批量抠图和更换证件照背景底色,图片使用卓别林的个人肖像,代码来源抠图功能实现的博客。代码做了一些更改已实现蓝底背景功能,并实现边界框图提取。 阅读详情

相关推荐

PaddleHub——AI开发者的得力助手:简介、安装、使用

PaddleHub是飞桨生态下的预训练模型应用工具库(Toolkit)。它内置了各种常用的预训练模型,可用于图像分类、目标检测、自然语言处理等领域。同时,PaddleHub中包括了各种实用的API和功能,例如Fine-tune API、Serving API等,可以大大地缩短我们使用深度学习模型进行开发的时间。此处以YOLOv3为例,通过设置with_detection参数为True,来完成目标检测任务的载入。并通过相应的API,完成Fine-tune过程。### 总结。

qq_37934722的博客 1384

60分钟教你上手PaddleHub

PaddleHub 介绍   PaddleHub 是基于 PaddlePaddle 开发的预训练模型管理工具,可以借助预训练模型更便捷地开展迁移学习工作,旨在让 PaddlePaddle 生态下的开发者更便捷体验到大规模预训练模型的价值。   PaddleHub 目前的预训练模型覆盖了图像分类、目标检测、词法分析、Transformer、情感分析五大类别。未来会持续开放更多类型的深度...

程序猿废柴的博客 2万+

K210视觉项目上位机避坑指南:解决C#解析ESP8266 TCP图像流的乱码、卡顿与连接中断

本文详细解析了K210与ESP8266在视觉项目中的上位机开发问题,重点解决TCP图像流解析中的乱码、卡顿与连接中断问题。通过自定义协议、JPEG流重组、TCP连接优化等实战技巧,提升系统稳定性和性能,适用于嵌入式视觉开发者和C#上位机程序员。

weixin_28730131的博客 402

Python中的paddlehub入门

在机器学习领域,使用预训练模型能够大大提高开发效率。PaddleHub是一个基于飞桨PaddlePaddle开发的预训练模型应用工具库,它提供了许多常见的预训练模型供开发者使用,包括图像分类、目标检测、文本生成等任务。本文将介绍如何在Python中使用PaddleHub进行开发。本文介绍了如何在Python中使用PaddleHub进行开发,以生成标题的任务为例。通过PaddleHub,我们可以方便地使用预训练模型完成各种任务,大大提高了机器学习的开发效率。

牛肉胡辣汤 2001

低速信号设计之 LPC 篇

摘要:LPC总线作为服务器低速信号设计的关键技术,在BIOS芯片连接、Super I/O芯片控制和嵌入式管理等方面发挥着重要作用。其采用33MHz时钟频率和4位并行传输机制,理论速率达16.5MB/s。设计时需重点关注布线长度(建议<10cm)、信号完整性(45°走线、合理层间隔离)和过孔优化等要点。典型应用案例表明,通过规范设计可确保在工业控制等复杂环境中稳定工作。LPC总线凭借低成本、低引脚数和良好兼容性,仍是服务器低速外设连接的重要解决方案。

qq_16237389的博客 1164

Python 高级语法:闭包

闭包(Closure)是函数式编程中的一个重要概念。在Python中,闭包可以简单理解为:一种特殊的函数。外函数:嵌套函数中最外层的函数称之为外函数。内函数:嵌套函数中最内层的函数称之为内函数;内函数引用了外函数的临时变量;外函数的返回使用了临时变量的内函数。

moment159的博客 2353

PaddlePaddle升级解读 | 十余行代码完成迁移学习,PaddleHub实战篇

迁移学习 (Transfer Learning) 是属于深度学习的一个子研究领域,该研究领域的目标在于利用数据、任务、或模型之间的相似性,将在旧领域学习过的知识,迁移应用...

PaddlePaddle 989

【论文+代码】ZS-N2N实现小样本零网络图像去噪

本文涵盖论文原文讲解与代码复现。

weixin_46287760的博客 4001

resnet50代码_PaddlePaddle升级解读 | 十余行代码完成迁移学习,PaddleHub实战篇

迁移学习 (Transfer Learning) 是属于深度学习的一个子研究领域,该研究领域的目标在于利用数据、任务、或模型之间的相似性,将在旧领域学习过的知识,迁移应用于新领域中。迁移学习吸引了很多研究者投身其中,因为它能够很好的解决深度学习中的以下几个问题:一些研究领域只有少量标注数据,且数据标注成本较高,不足以训练一个足够鲁棒的神经网络大规模神经网络的训练依赖于大量的计算资源,这对...

weixin_39577422的博客 516

基于STM32L4XX、HAL库的MAX13487EESA RS485总线收发器驱动程序设计

MAX13487EESA是一款3.3V供电的RS-485/RS-422收发器,由Maxim Integrated生产。PA4 (控制引脚) ---> /RE, DE (连接在一起)具有±15kV ESD保护的驱动器输出和接收器输入。半双工RS-485/RS-422通信。工业温度范围:-40°C至+85°C。工作电压范围:3.0V至3.6V。数据速率高达250kbps。

zhusl6688的博客 685

2026华为OD机考新系统真题 + 双机位C卷 + 往年真题 - 题库目录分值说明 + 考点说明+在线OJ

2026年4月1日起,华为OD机试正式切换至新系统模式!采用力扣模式,无需自己写输入! 难度大幅度降低。正在备考华为OD机试的同学,优先刷新系统机试真题,可大幅提升通过率。 新系统考题考点与旧版一致,无需重新适应。本专栏所有算法题均配有详细思路解析,并提供C语言、JS、C++、Python、Go、Java多语言源码实现。订阅后私信即可开通专属OJ刷题权限,高效备考一次上岸!

算法大师! 45万+

paddlepaddle测试安装_PaddlePaddle升级解读 | 十余行代码完成迁移学习,PaddleHub实战篇...

迁移学习 (Transfer Learning) 是属于深度学习的一个子研究领域,该研究领域的目标在于利用数据、任务、或模型之间的相似性,将在旧领域学习过的知识,迁移应用于新领域中。迁移学习吸引了很多研究者投身其中,因为它能够很好的解决深度学习中的以下几个问题:一些研究领域只有少量标注数据,且数据标注成本较高,不足以训练一个足够鲁棒的神经网络大规模神经网络的训练依赖于大量的计算资源,这对于一般用户...

weixin_28811289的博客 208

qiankun 主子应用部署教程(Nginx 小白版)

本地开发:不用 Nginx,直接localhost:端口即可。本地模拟线上:用hosts + Nginx + 自定义域名,效果和生产接近。线上部署主应用只要配置 history 模式子应用必须支持 CORS + history + 缓存能跑是因为默认 server 兜底,但推荐写真实域名。主应用 vs 子应用的 Nginx 配置区别为什么本地和线上表现不一样history 模式 + 跨域的最佳实践。

专注于前端开发与实战技巧,记录从零到一的学习与项目经验。分享 Vue3 / JavaScript / TypeScript / Flutter /Uniapp等前端技术,以及 性能优化、工程化、最佳实践。 997

PaddlePaddlev1.3升级解读:十余行代码完成迁移学习

迁移学习 (Transfer Learning) 是属于深度学习的一个子研究领域,该研究领域的目标在于利用数据、任务、或模型之间的相似性,将在旧领域学习过的知识,迁移应用于新领域中。迁移学习吸引了很多研究者投身其中,因为它能够很好的解决深度学习中的以下几个问题: 一些研究领域只有少量标注数据,且数据标注成本较高,不足以训练一个足够鲁棒的神经网络 大规模神经网络的训练依赖于大量...

PaddlePaddle 956

药物对接仿真软件:HADDOCK_(16).实践项目:抗体-抗原对接案例

定义分子结构文件。

kkchenjj的博客 578

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

飞桨模型保存_飞桨全新发布工具组件

11 月 5 日,在 Wave Summit+2019 秋季深度学习开发者峰会上,飞桨全新发布和重要升级了最新的 21 项进展,在深度学习开发者社区引起了巨大的反响。很多未到场的开发者觉得遗憾,希望可以了解飞桨发布会背后的更多技术细节,因此我们特别策划了一个系列稿件,分别从核心框架、基础模型库、端到端开发套件、工具组件和服务平台五个层面分别详细解读飞桨的核心技术与最新进展,敬请关注。今天给大家带来...

weixin_30951515的博客 273

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

飞桨全新发布工具组件

11 月 5 日,在 Wave Summit+2019 秋季深度学习开发者峰会上,飞桨全新发布和重要升级了最新的 21 项进展,在深度学习开发者社区引起了巨大的反响。很多未到场的开发者...

PaddlePaddle 551

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

神经网络代码解读_强化学习、联邦学习、图神经网络,飞桨全新工具组件详解...

机器之心发布机器之心编辑部11 月 5 日,在 Wave Summit+2019 秋季深度学习开发者峰会上,飞桨全新发布和重要升级了最新的 21 项进展,在深度学习开发者社区引起了巨大的反响。很多未到场的开发者觉得遗憾,希望可以了解飞桨发布会背后的更多技术细节,因此我们特别策划了一个系列稿件,分别从核心框架、基础模型库、端到端开发套件、工具组件和服务平台五个层面分别详细解读飞桨的核心技术...

weixin_28730927的博客 239

强化学习、联邦学习、图神经网络,飞桨全新工具组件详解

2019-12-05 14:55:36 机器之心发布机器之心编辑部 11 月 5 日,在 Wave Summit+2019 秋季深度学习开发者峰会上,飞桨全新发布和重要升级了最新的 21 项进展,在深度学习开发者社区引起了巨大的反响。 很多未到场的开发者觉得遗憾,希望可以了解飞桨发布会背后的更多技术细节,因此我们特别策划了一个系列稿件,分别从核心框架、基础模型库、端到端开发套件、工具组...

喜欢打酱油的老鸟 1748

神经网络算法代码_强化学习、联邦学习、图神经网络,飞桨全新工具组件详解...

机器之心发布机器之心编辑部11 月 5 日,在 Wave Summit+2019 秋季深度学习开发者峰会上,飞桨全新发布和重要升级了最新的 21 项进展,在深度学习开发者社区引起了巨大的反响。很多未到场的开发者觉得遗憾,希望可以了解飞桨发布会背后的更多技术细节,因此我们特别策划了一个系列稿件,分别从核心框架、基础模型库、端到端开发套件、工具组件和服务平台五个层面分别详细解读飞桨的核心技术...

weixin_39664456的博客 163
上一篇: 十分钟学会用Python交易股票
下一篇: 作为Python测试工程师,你应该知道这些!
python之光
博客等级 码龄7年 114粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值