炼数成金 门户 商业智能 深度学习 查看内容

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

2019-6-20 15:35| 发布者: 炼数成金_小数| 查看: 32062| 评论: 0|原作者: Charlotte77|来自: AINLP

摘要: Hub是什么?Hub本意是中心,docker有docker Hub,大家可以把自己创建的镜像打包提交到docker hub上,需要的时候再pull下来,非常方便,那么模型是不是也可以这样玩呢?完全可以啊!很多时候我们不需要从头开始训练模 ...

Python 工具 模型 开源 商业智能贵州快3开奖结果

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,还有蚂蚁软件所示:

$ 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、情感分析五大类。

一行代码预测
分词
# 使用蚂蚁软件载时会先下载再预测,也可以先试用hub install model_name 下载好模型再使用hub run预测,也可直接运行hub run。hub一共有十个命令,其他命令可参考PaddleHub命令行工具(参考文献2)

支持29种模型
PaddleHub目前支持29种模型,主要以CV和NLP模型为主,包括NLP目前最火的BERT和蚂蚁软件面举个实例教大家如何用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.get_expected_image_height(), 
images_mean=module.get_pretrained_images_mean(), 
images_std=module.get_pretrained_images_std(), 
dataset=dataset)

4.组建Finetune Task
由于猫狗分类是一个二分类的任务,而我们下载的分类module是在ImageNet数据集上训练的千分类模型,所以我们需要对模型进行简单的微调,把模型改造为一个二分类模型:
1. 获取module的上下文环境,包括输入和输出的变量,以及Paddle Program;
2. 量中找到特征图提取层feature_map;
3. 在feature_map后面接入一个全连接层,生成Task

input_dict, output_dict, program = module.context(trainable=True) 
img = input_dict["image"] 
feature_map = output_dict["feature_map"] 

task = hub.create_img_cls_task( 
feature=feature_map, num_classes=dataset.num_labels) 

feed_list = [img.name, task.variable("label").name]# 设置
configconfig = hub.RunConfig(use_cuda=False, 
num_epoch=1, 
checkpoint_dir="cv_finetune_turtorial_demo", 
batch_size=32, 
log_interval=10, 
eval_interval=50, 
strategy=hub.finetune.strategy.DefaultFinetuneStrategy())

5.启动Fine-tune并查看效果
可以选择finetune_and_eval接口来进行模型训练,这个接口在finetune的过程中,会周期性的进行模型效果的评估,以便我们了解整个训练过程的性能变化。

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

训练过程中的性能数据会被记录到本地,我们可以通过VisualDL来可视化这些数据。我们在shell中输入以下命令来启动VisualDL,其中${HOST_IP}为本机IP,需要用户自行指定

$ visualdl --logdir ./cv_finetune_turtorial_demo/vdllog --host ${HOST_IP} --port 8989

启动服务后,我们使用浏览器访问${HOST_IP}:8989,可以看到训练以及预测的loss曲线和accuracy曲线。最后再按照常规流程对模型进行预测即可。

参考资料: 
1.PaddleHub官方github:
https://github.com/PaddlePaddle/PaddleHub 
2.PaddleHub命令行工具:
https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub命令行工具 
3.Paddle-code:
https://github.com/huxiaoman7/PaddlePaddle_code 
4.Paddle-models:
https://github.com/PaddlePaddle/models 
5.Pytorch Hub:
https://pytorch.org/blog/towards-reproducible-research-with-pytorch-hub/

声明:本文版权归原作者所有,文章收集于网络,为传播信息而发,如有侵权,请联系小编及时处理,谢谢!

欢迎加入本站公开兴趣群
商业智能与数据分析群
兴趣范围包括:各种让数据产生价值的办法,实际应用案例分享与讨论,分析工具,ETL工具,数据仓库,数据挖掘工具,报表系统等全方位知识
QQ群:81035754

鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论

热门频道

  • 大数据
  • 商业智能
  • 量化投资
  • 科学探索
  • 创业

即将开课

 

GMT+8, 2019-8-23 20:14 , Processed in 0.164016 second(s), 25 queries .

上海快3开奖结果 上海快3开奖结果 安徽快三开奖结果 江苏快3开奖结果 河北快三开奖结果 江苏快3开奖结果 河南快三开奖结果 贵州快三开奖结果 江苏快三开奖结果 江苏快三开奖结果