APP下载

PaddleHub 1.0正式释出: 一键模型载入 十行程式码完成迁移学习_训练

消息来源:baojiabao.com 作者: 发布时间:2026-05-12

报价宝综合消息PaddleHub 1.0正式释出: 一键模型载入 十行程式码完成迁移学习_训练

允中 发自 凹非寺

飞桨(PaddlePaddle)核心框架Paddle Fluid v1.5已经发布,而作为其关键工具,用来迁移学习的PaddleHub也进行了全面更新,正式释出了1.0版本。

全新的PaddleHub模型和任务更加丰富,为使用者提供了覆盖文字影象视讯40+预训练模型,同时还在飞桨官网上开辟了PaddleHub的网页。

本文将对PaddleHub及其更新做更加全面的介绍。

PaddleHub是什么

深度学习模型的价值在AI时代不断增大。要想得到一个高质量的深度学习模型,离不开4个要素,优秀的演算法、充足的算力、丰富的资料以及专家知识。大家在深度学习中常常遇到以下问题:

PaddleHub就是为了解决对深度学习模型的需求而开发的工具。

它基于飞桨领先的核心框架,精选效果优秀的演算法,提供了百亿级大资料训练的预训练模型,方便使用者不用花费大量精力从头开始训练一个模型。PaddleHub可以便捷地获取这些预训练模型,完成模型的管理和一键预测。

配合使用Fine-tune API,可以基于大规模预训练模型快速完成迁移学习,让预训练模型能更好地服务于使用者特定场景的应用。

PaddleHub有什么特色

1、 通过PaddleHub,开发者可以便捷地获取飞桨生态下的所有预训练模型,涵盖了影象分类、目标检测、词法分析、语义模型、情感分析、语言模型、视讯分类、影象生成八类主流模型40余个,如图1 所示。飞桨还发布了PaddleHub的官方网页,对各个预训练模型的应用提供了详实的介绍。

图1 PaddleHub提供了40+官方预训练模型

2、PaddleHub引入了模型即软件的概念,通过Python API或者命令列工具,一键完成预训练模型地预测。此外还借鉴了Anaconda和pip软件包管理的理念设计了一套命令列界面。

深度学习时代,模型发展的趋势会逐渐向软件工程靠拢;未来模型可以当作一个可执行程式,一键预测;也可以是第三方库,通过模型插拔的方式提高开发者的开发效率。

同时模型会有版本的概念,通过不断迭代升级的方式提升我们模型的效果。通过命令列工具,可以方便快捷的完成模型的搜寻、下载、安装、预测等功能,对应的关键的命令分别是search,download,install,run等。

如以下示例,在安装完成飞桨和PaddleHub以后(具体安装方法见后文示例),使用词法分析模型LAC,可以一键实现分词。

$ hub run lac --input_text "今天是个好日子"

[{ \'word\': [ \'今天\', \'是\', \'个\', \'好日子\'], \'tag\': [ \'TIME\', \'v\', \'q\', \'n\']}]

再如以下示例所示,是一个目标检测的例子,通过hub run 呼叫不同的目标检测模型,一行即可完成预测,同时也可以快速体验哪个模型能更符合开发的需求。

$ hub run yolov3_coco2017 --input_path test.jpg

$ hub run faster_rcnn_coco2017 --input_path test.jpg

图2 PaddleHub一键完成预训练模型地预测

3、通过PaddleHub Fine-tune API,结合少量程式码即可完成大规模预训练模型的迁移学习。下面一节我们也会全面介绍PaddleHub的API。

PaddleHub API全景

PaddleHub API的全景图如图3所示。

为了更好帮助使用者更好的应用预训练模型,PaddleHub对Fine-tune做了6个层次的抽象。

图3 PaddleHub Fine-tune API全景

PaddleHub还支援使用者可以通过继承BasicTask来实现自己的任务。

PaddleHub封装了finetune、eval、finetune_and_eval、predict等直观的基础界面,让开发者更方便完成模型的迁移和应用。

图4 PaddleHub Fine-tune API使用

接下来本文结合实际案例,讲述如何快速使用PaddleHub实现十行程式码完成文字分类迁移。

场景是标注资料不多中文文字分类场景,如何提高分类的精度和模型的泛化能力。

这里的方案是借助ERNIE + PaddleHub Finetune API,除去安装,只想要5个步骤,10行程式码即可解决这一问题。

这里先介绍一下ERNIE,它是百度释出的知识增强的预训练模型,通过建模海量资料中的词、实体及实体关系,学习真实世界的语义知识。

具体来说,ERNIE 模型通过对词、实体等语义单元的掩码,使得模型学习完整概念的语义表示。

相较于 BERT 学习原始语言讯号,ERNIE 直接对先验语义知识单元进行建模,增强了模型语义表示能力。

ERNIE在多个公开的中文资料集上进行了效果验证,包括语言推断、语义相似度、命名实体识别、情感分析、问答匹配等自然语言处理各类任务上,均超越了语义表示模型 BERT 的效果。

接下来开始实战演练PaddleHub。

1. 安装

$ pip install paddlepaddle #CPU安装命令

或者

$ pip install paddlepaddle-gpu # GPU安装

以上命令是安装CPU或者GPU版本的飞桨。通过以下命令则可以安装PaddleHub。

$ pip install paddlehub

另外,PaddleHub内建了深度学习视觉化工具VisualDL的依赖,通过VisualDL,可以很好的对深度学习任务进行视觉化。

2. 选择预训练模型

在完成安装飞桨与PaddleHub,import汇入相应模组后,一行程式码即可载入预训练模型。只要1分钟,你就能得到万级别GPU小时训练出来的ERNIE模型。当然也可以支援BERT模型呼叫,只需要更换不同的模型名称即可。

importpaddle.fluid asfluid

importpaddlehub ashub

module = hub.Module(name= "ernie")

inputs, outputs, program = module.context(trainable= True, max_seq_len= 128)

第二步是获取模型上下文,包括了预训练模型的输入Tensor,输出Tensor还有计算图。这里面有个关键引数是trainable。如果trainable为True,那么就是一个fine-tune的任务,预训练模型的引数会做微调,以更好的适应顶层的应用、如果trainable为False,那么就预训练模型引数保持不变,将它当作特征提取器。对于ERNIE模型而言,不推荐使用特征提取,一定要通过Finetune的方式才能取得更好的效果。

3. 资料处理

dataset = hub.dataset.ChnSentiCorp

reader = hub.reader.ClassifyReader(

dataset=dataset,

vocab_path=module.get_vocab_path,

max_seq_len= 128)

hub.dataset.ChnSentiCorp 会自动从网络下载资料集并解压到使用者目录下。

4. 策略配置

接下来开始配置Fine-tune时用到的优化策略。针对ERNIE与BERT类任务,PaddleHub封装了适合这一任务的迁移学习优化策略AdamWeightDecayStrategy

strategy = hub.AdamWeightDecayStrategy(

learning_rate= 5e-5,

weight_decay= 0.01,

lr_scheduler= "linear_decay",

)

config=hub.RunConfig(use_cuda= True, num_epoch= 3,batch_size= 32,checkpoint_dir= " ckpt_dir",strategy=strategy)

5. 建立迁移学习任务

组建移学习任务这块也非常简单,首先是选择预训练的模型输出,作为我们句子的特征。

在这里ERNIE我们选择pooled_output作为句子的特征输出。也可以通过获取sequence_output来得到词粒度的特征,这个特征般用于序列标注。

pooled_output = outputs[ "pooled_output"]

# feed_list的Tensor顺序不可以调整

feed_list = [

inputs[ "input_ids"].name,

inputs[ "position_ids"].name,

inputs[ "segment_ids"].name,

inputs[ "input_mask"].name,

]

cls_task = hub.TextClassifierTask(

data_reader=reader,

feature=pooled_output,

feed_list=feed_list,

num_classes=dataset.num_labels,

config=config)

cls_task.finetune_and_eval

Finetuning API非常智慧,会自动完成评估,储存最优模型还有自动视觉化的功能。Finetune API训练过程中会自动对关键训练指标进行打点,启动程式后执行下面命令

$ visualdl --logdir ckpt_dir/vdllog -t ${HOST_IP}

其中${HOST_IP}为本机IP地址,如本机IP地址为192.168.0.1,用浏览器开启192.168.0.1:8040,其中8040为埠号,即可看到训练过程中指标的变化情况

6. 模型预测

通过Finetune完成模型训练后,在对应的ckpt_dir目录下,会自动储存验证集上效果最好的模型。接下来可以按照如下的示例进行预测。

# Data to be prdicted

data = [

[ "这个宾馆比较陈旧了,特价的房间也很一般。总体来说一般"], [ "交通方便;环境很好;服务态度很好 房间较小"],[ "还稍微重了点,可能是硬盘大的原故,还要再轻半斤就好了。其他要进一步验证。贴的几种膜气泡较多,用不了多久就要更换了,屏幕膜稍好点,但比没有要强多了。建议配赠几张膜让用使用者自己贴。"],[ "前台接待太差,酒店有A B楼之分,本人check-in后,前台未告诉B楼在何处,并且B楼无明显指示;房间太小,根本不像4星级设施,下次不会再选择入住此店啦"], [ "19天硬盘就罢工了~~~算上运来的一周都没用上15天~~~可就是不能换了~~~唉~~~~你说这算什么事呀~~~"]]

index = 0

run_states = cls_task.predict(data=data)

results = [run_state.run_results forrun_state inrun_states]

forbatch_result inresults:

# get predict index

batch_result = np.argmax(batch_result, axis= 2)[ 0]

forresult inbatch_result:

print( "%stpredict=%s"% (data[index][ 0], result))

index += 1

除了以上的介绍,PaddleHub还在AI Studio和AIBook上提供了IPython NoteBook形式的demo,开发者可以直接在平台上线上体验PaddleHub带来的各种便捷。

此外,AI studio平台还发布了亿元算力支援计划,提供了“每日执行赠12小时”和“连续5天执行赠48小时”两种机制共同服务,每天都得能轻松获得!

该平台整合算力、教程、 样例模型、工程开发、线上部署的能力, 乃至比赛平台,满足从0基础学习到技术落地的全生命周期,帮助开发者全面掌握深度学习技术的各方各面。

https://github.com/PaddlePaddle/PaddleHub?fr=lzw2

下载最新版本的Paddle Fluid v1.5,请点选阅读原文

http://www.paddlepaddle.org.cn?fr=lzw2

最后给大家推荐一个GPU福利 - Tesla V100免费算力!配合PaddleHub能让模型原地起飞~ 扫码下方二维码申请~

2020-01-28 21:05:00

相关文章