专栏名称: 机器学习算法与自然语言处理
一个有情怀的公众号。机器学习、自然语言处理、算法等知识集中营、期待与你相遇~
目录
相关文章推荐
长沙晚报  ·  长沙将新增一座体育公园!位置就在…… ·  昨天  
格上财富  ·  他,揭秘了ChatGPT和DeepSeek诞 ... ·  昨天  
奔流新闻  ·  中国女篮领队王芳卸任 ·  昨天  
奔流新闻  ·  中国女篮领队王芳卸任 ·  昨天  
新浪体育  ·  中国巨人遭 KO 倒下 他其实早就该输了 ·  3 天前  
51好读  ›  专栏  ›  机器学习算法与自然语言处理

比Pytorch Hub更早?三分钟带你弄懂PaddleHub!

机器学习算法与自然语言处理  · 公众号  ·  · 2019-06-21 00:00

正文

作者: Charlotte77

微信公众号: 我爱PaddlePaddle




Hub是什么?Hub本意是中心,docker有docker Hub,大家可以把自己创建的镜像打包提交到docker hub上,需要的时候再pull下来,非常方便,那么模型是不是也可以这样玩呢?完全可以啊!很多时候我们不需要从头开始训练模型,如果有预训练好的模型,直接做迁移学习就可以,但是传统的方式基本上都需要从各个官网上去下载,模型比较大,用起来并不轻量。现在各家都发布了Hub ,可以直接从Hub上下载pretrain模型做finetune或预测,极大的减轻了工作量。下面直接从四个维度对比下Pytorch Hub和PaddleHub~


Pytorch Hub V.S PaddleHub


支持模型数量


Pytorch Hub 目前支持18个模型,PaddleHub支持29个,包含16个model和13个module,model可以直接使用,module提供了预训练模型的参数,支持命令行调用,下面来看看分别支持哪些模型:


Pytorch Hub目前支持18种模型


PaddleHub目前支持29种模型(包含model和module)


从图中可以看到,PaddleHub 支持的模型数量有绝对的优势 ;而Pytorch Hub涉及的方向更多,但是每个方向的模型并不多,对CV的支持更多;PaddleHub涉及的方向只有两个,CV和NLP,但是 对NLP的支持尤其多 ,高达22个,不仅包括目前最潮的BERT,还有百度自己研发的知识增强语义表示模型 ERNIE ,在多个中文NLP任务中 表现超过BERT


是否支持命令行运行


目前Pytorch Hub不支持命令行运行,但PaddleHub支 持,命令行运行就是指我们安装PaddleHub后,可以无需进入python环境,即可快速体验PaddleHub无需代码、一键预测的命令行功能。需要注意的是,在PaddleHub中,既可以支持命令行使用,即在终端输入,如下所示:


$ hub run XXX(nlp模型) --input_text XXX(需要预测的内容) 
$ hub run XXX(cv模型) --input_path XXX(需要预测的内容)


也可以支持调用api,如下所示:


import paddlehub as hub 

hub.finetune_and_eval( 
task, 
data_reader, 
feed_list, 
config=None)


实际上,PaddleHub为Model和Module的管理和使用都提供了命令行工具,但是model和module是有区别的,一个是模型,一个是模块。


model表示预训练好的参数和模型 ,当需要使用Model进行预测时,需要模型配套的代码,进行模型的加载,数据的预处理等操作后,才能进行预测。我们在使用PaddleHub来调用模型时,可以使用hub download 命令获取到最新的model再进行实验。 module是model的一个可执行模块 ,简单来说,一个Module可以支持直接命令行预测,也可以配合PaddleHub Finetune API,通过少量代码实现迁移学习。需要注意的是,不是所有的Module都支持命令行预测; (例如BERT/ERNIE Transformer类模型,一般需要搭配任务进行finetune) 也不是所有的Module都可用于finetune(例如LAC词法分析模型,我们不建议用户用于finetune),具体区别请见PaddleHub的github wiki(参考文献2)


是否支持Fine-tune


PyTorch Hub 没有Fine-tune接口,PaddleHub可以支持直接从hub调用Fine-tune 的api 。在https://pytorch.org/官网下的文档中可以看到,目前Pytorch Hub不支持hub一键式fine-tuning,现有模型的finetuning还是基于传统的脚本式调参。


PaddleHub在Fine-tune这一块做的很完善,在前一个板块也给大家详细举了示例讲解,在PaddleHub的官方GitHub中,有非常详细的Fine-tune教程,大家可以参考:


PaddleHub图像分类迁移

https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub 图像分类迁移教程


PaddleHub文本分类迁移

https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub文本分类迁移教程


是否支持用户自定义上传模型


PyTorch Hub 支持,PaddleHub不支持 。我看了https://pytorch.org/官网下的文档,只需要在开源的模型代码里增加了一个hubconf.py, 然后在pytorch/hub里提一个pr,cr后merge到 branch/tag 这个分支就ok了。方法非常简单,代码也不复杂。


torch.hub.load(github, model, force_reload=False, *args, **kwargs)


PaddleHub目前暂时还不支持用户自己提交新模型,但后期应该会支持这个功能,到时候希望大家能踊跃使用,push自己的新模型哦~


总结一下四个维度的比较:



总之,从这四个维度上,我个人感觉Pytorch Hub更像一个小工具,帮助大家迅速试用一下开源的新模型,但是真正到实际应用,还是要基于老的一套的fine-tuning,不能直接从hub里调用fine-tune的api,所以并不实用。 从工业级实用的角度来说 PaddleHub做的要更成熟一些 ,用户可以更方便的使用PaddleHub来进行Fine-tune。


下面,我们具体来看看PaddleHub 如何直接使用命令行 ,调用一行代码show出结果& 使用Finetune Api来对模型进行微调 ,并举一个实例教大家一步一步实现。


一行命令调用,直接输出结果


PaddleHub安装


  • 环境依赖

    • Python==2.7 or Python>=3.5

    • PaddlePaddle>=1.4.0


  • 安装

    • pip install paddlehub


命令行快速体验


安装好后,不需要进入python环境import就可以直接先体验hub的便捷,因为在PaddleHub中hub可以作为一个独立的模块直接运行。PaddleHub目前包含图像分类、目标检测、词法分析、Transformer、情感分析五大类。


一行代码预测


  • 分词


# 使用百度LAC进行分词 • 
$ hub run lac --input_text "今天的你真好看" 
[{'tag': ['TIME''u''r''d''a'], 'word': ['今天''的''你''真''好看']}]


  • 情感分析


# 使用百度Senta情感分析模型对句子进行预测 
$ hub run senta_bilstm --input_text "老铁666,带你开黑" 
[{'text''老铁666,带你开黑'
'sentiment_key''positive''sentiment_label'2'positive_probs'0.72
06'negative_probs'0.2794}]


  • 目标检测


#使用SSD检测模型对图片进行目标检测 
hub run ssd_mobilenet_v1_pascal --input_path test_img_bird.jpg


检测结果:



  • 图像识别


# 使用resnet-50做图像识别 
hub run resnet_v2_50_imagenet --input_path test_img_bird.jpg 
Install Module resnet_v2_50_imagenet 
Downloading resnet_v2_50_imagenet 
[==================================================100.00
Uncompress /root/.paddlehub/cache/resnet_v2_50_imagenet 
[==================================================100.00
Successfully installed resnet_v2_50_imagenet-1.0.0 
[[{'brambling': 0.4907981}]]


注:模型未下载时会先下载再预测,也可以先试用hub install model_name 下载好模型再使用hub run预测,也可直接运行hub run。hub一共有十个命令,其他命令可参考PaddleHub命令行工具(参考文献2)


支持29种模型


PaddleHub目前支持29种模型,主要以CV和NLP模型为主,包括NLP目前最火的BERT和百度自己自己研发开源的ERNIE,以及CV中的ssd-mobilenet、resnet-50、resnet-152等。


  • NLP预测


数据通过 —input_text或—input_file导入来实现单次预测和批量预测


# 单文本预测 
hub run lac --input_text "今天是个好日子" 
# 多文本分析 
hub run lac --input_file test.txt


  • CV预测


数据通过—input_path或—input_file导入来实现单次预测和批量预测


# 单张照片预测 
hub run ssd_mobilenet_v1_pascal --input_path test.jpg 
# 多张照片预测 
hub run ssd_mobilenet_v1_pascal --input_file test.txt



支持迁移学习,Fine-tune更Easy


Fine-tune全景图


PaddleHub+Finetune流程图


PaddleHub Finetune api


Fine-tune是迁移学习中使用最多的方式之一,通常我们可以在预训练好的模型上进行微调来实现模型迁移,从而达到模型适应新领域(Domain)数据的目的。上图是做一个完整的迁移学习需要的步骤,下面举个实例教大家如何用PaddleHub做图像分类迁移学习。


1. 准备工作




安装 PaddlePaddle PaddleHub


pip install paddlepaddle( 推荐安装1.4.0版本以上) 
pip install paddlehub


2. 选择模型




此处使用经典的 ResNet-50 作为预训练模型


module_map = { 
"resnet50""resnet_v2_50_imagenet"
"resnet101""resnet_v2_101_imagenet"
"resnet152""resnet_v2_152_imagenet"
"mobilenet""mobilenet_v2_imagenet"
"nasnet""nasnet_imagenet"
"pnasnet""pnasnet_imagenet" 

module_name = module_map["resnet50"
module = hub.Module(name = module_name)


3. 准备数据




# 直接用PaddleHub提供的数据集 
dataset = hub.dataset.DogCat()# 生成readerdata_reader = hub.reader.ImageClassificationReader( 
image_width=module.get_expected_image_width(), 
image_height=module






请到「今天看啥」查看全文