主页 > Python结构 > 正文

PaddlePaddle晋级解读|十余行代码完结搬迁学习 PaddleHub实战篇

搬迁学习 (Transfer Learning) 是归于深度学习的一个子研讨范畴,该研讨范畴的方针在于运用数据、使命、或模型之间的相似性,将在旧范畴学习过的常识,搬迁运用于新范畴中。搬迁学习招引了许多研讨者投身其间,因为它能够很好的处理深度学习中的以下几个问题:

  一些研讨范畴只要少数标示数据,且数据标示本钱较高,不足以练习一个满足鲁棒的神经网络

  大规模神经网络的练习依赖于很多的核算资源,这关于一般用户而言难以完结

  应关于普适化需求的模型,在特定运用上体现不尽善尽美

  为了让开发者更快捷地运用搬迁学习,百度 PaddlePaddle 开源了预练习模型办理东西 PaddleHub。开发者用运用只是十余行的代码,就能完结搬迁学习。本文将全面介绍 PaddleHub 及其运用办法。

  项目地址:

PaddleHub 介绍

  PaddleHub 是根据 PaddlePaddle 开发的预练习模型办理东西,能够凭借预练习模型更快捷地展开搬迁学习作业,旨在让 PaddlePaddle 生态下的开发者更快捷体会到大规模预练习模型的价值。

  PaddleHub 现在的预练习模型覆盖了图画分类、方针检测、词法剖析、Transformer、情感剖析五大类别。未来会持续敞开更多类型的深度学习模型,如言语模型、视频分类、图画生成等预练习模型。

图 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 模型(单阶段方针检测)为比如,能够经过以下指令完结单张图片的猜测。

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

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

Fine-tune API

  PaddleHub 供给了根据 PaddlePaddle 完结的 Fine-tune API, 要点针对大规模预练习模型的 Fine-tune 使命做了高阶的笼统,让预练习模型能更好服务于用户特定场景的运用。经过大规模预练习模型结合 Fine-tune,能够在更短的时刻完结模型的收敛,一起具有更好的泛化才能。

图 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。

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

  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 曲线,如下图所示。

       10. 运用模型进行猜测

  当 Fine-tune 完结后,咱们运用模型来进行猜测,整个猜测流程大致能够分为以下几步:

  1、构建网络

  2、生成猜测数据的 Reader

  3、切换到猜测的 Program

  4、加载预练习好的参数

  5、运转 Program 进行猜测

  经过以下指令来获取测验的图片(适用于猫狗分类的数据集)

  留意:其他数据集所用的测验图片请自行预备。

  完好猜测代码如下:

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


上一篇:根据PaddlePaddle的词向量实战 | 深度学习根底使命教程系列
下一篇:最终一页

PythonTab微信大众号:

Python技能交流合作群 ( 请勿加多个群 ):

群1: 87464755

群2: 333646237

群3: 318130924

群4: 385100854