迁移学习resnet_十余行代码完成迁移学习,百度PaddleHub实战解读

机器之心专栏

来源:百度 PaddlePaddle

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

  • 一些研究领域只有少量标注数据,且数据标注成本较高,不足以训练一个足够鲁棒的神经网络
  • 大规模神经网络的训练依赖于大量的计算资源,这对于一般用户而言难以实现
  • 应对于普适化需求的模型,在特定应用上表现不尽如人意

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

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

PaddleHub 介绍

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

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

b4ecd0e0adb7c6f9e8886cb068067459.png

图 1 PaddleHub 功能全景

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

命令行工具

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

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

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

# 单文本预测$ hub run lac --input_text "今天是个好日子"

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

# 使用SSD检测模型对图片进行目标检测,第一条命令是下载图片,第二条命令是执行预测,用户也可以自# 己准备图片$ wget --no-check-certificate https://paddlehub.bj.bcebos.com/resources/test_img_bird.jpg$ hub run ssd_mobilenet_v1_pascal --input_path test_img_bird.jpg

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

Fine-tune API

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

6c3e0daea1036c9184f8e68e2aac5fe1.png

图 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,那么可以跳过以下安装步骤。

$ pip install paddlepaddle #CPU 安装命令或者$ pip install paddlepaddle-gpu # GPU 安装

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

通过以下命令来安装 PaddleHub

$ pip install paddlehub

2. 选择合适的模型

首先导入必要的 python 包

# -*- coding: utf8 -*-import paddlehub as hubimport paddle.fluid as fluid

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

module_map = { "resnet50": "resnet_v2_50_imagenet
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值