日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一文带你看懂PaddleHub

發(fā)布時間:2024/10/8 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一文带你看懂PaddleHub 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


作者丨Charlotte77

來源丨我愛PaddlePaddle


Hub 是什么?Hub 本意是中心,docker 有 docker Hub,大家可以把自己創(chuàng)建的鏡像打包提交到 docker hub 上,需要的時候再 pull 下來,非常方便,那么模型是不是也可以這樣玩呢?


完全可以!很多時候我們不需要從頭開始訓(xùn)練模型,如果有預(yù)訓(xùn)練好的模型,直接做遷移學(xué)習(xí)就可以,但是傳統(tǒng)的方式基本上都需要從各個官網(wǎng)上去下載,模型比較大,用起來并不輕量。現(xiàn)在各家都發(fā)布了 Hub ,可以直接從 Hub 上下載 pretrain 模型做 finetune 或預(yù)測,極大的減輕了工作量。下面直接從四個維度對比 PyTorch Hub 和 PaddleHub。


PyTorch Hub v.s. PaddleHub


支持模型數(shù)量


Pytorch Hub 目前支持 18 個模型,PaddleHub 支持 29 個,包含 16 個 model 和 13 個 module,model 可以直接使用,module 提供了預(yù)訓(xùn)練模型的參數(shù),支持命令行調(diào)用,下面來看看分別支持哪些模型:


?PyTorch Hub目前支持18種模型


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


從圖中可以看到,PaddleHub 支持的模型數(shù)量有絕對的優(yōu)勢;而 PyTorch Hub 涉及的方向更多,但是每個方向的模型并不多,對 CV 的支持更多;PaddleHub 涉及的方向只有兩個,CV 和 NLP,但是對 NLP 的支持尤其多,高達(dá) 22 個,不僅包括目前最潮的 BERT,還有百度自己研發(fā)的知識增強語義表示模型 ERNIE,在多個中文 NLP 任務(wù)中表現(xiàn)超過 BERT


是否支持命令行運行


目前 PyTorch Hub 不支持命令行運行,但 PaddleHub 支持,命令行運行就是指我們安裝 PaddleHub 后,可以無需進入 Python 環(huán)境,即可快速體驗 PaddleHub 無需代碼、一鍵預(yù)測的命令行功能。需要注意的是,在 PaddleHub 中,既可以支持命令行使用,即在終端輸入,如下所示:


$?hub?run?XXX(nlp模型)?--input_text?XXX(需要預(yù)測的內(nèi)容)?$?hub?run?XXX(cv模型)?--input_path?XXX(需要預(yù)測的內(nèi)容)


也可以支持調(diào)用 api,如下所示:


import?paddlehub?as?hub?hub.finetune_and_eval(?task,?data_reader,?feed_list,?config=None)as?hub?

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


實際上,PaddleHub 為 Model 和 Module 的管理和使用都提供了命令行工具,但是 model 和 module 是有區(qū)別的,一個是模型,一個是模塊。?


model 表示預(yù)訓(xùn)練好的參數(shù)和模型,當(dāng)需要使用Model進行預(yù)測時,需要模型配套的代碼,進行模型的加載,數(shù)據(jù)的預(yù)處理等操作后,才能進行預(yù)測。我們在使用PaddleHub來調(diào)用模型時,可以使用hub download 命令獲取到最新的model再進行實驗。


module是model的一個可執(zhí)行模塊,簡單來說,一個 Module 可以支持直接命令行預(yù)測,也可以配合 PaddleHub Finetune API,通過少量代碼實現(xiàn)遷移學(xué)習(xí)。


需要注意的是,不是所有的 Module 都支持命令行預(yù)測(例如 BERT/ERNIE Transformer 類模型,一般需要搭配任務(wù)進行 finetune)。也不是所有的 Module 都可用于 finetune(例如 LAC 詞法分析模型,我們不建議用戶用于 finetune),具體區(qū)別請見 PaddleHub 的 github wiki(參考文獻(xiàn) 2)。


是否支持Fine-tune


PyTorch Hub 沒有 Fine-tune 接口,PaddleHub 可以支持直接從 hub 調(diào)用 Fine-tune 的 api。https://pytorch.org/ 官網(wǎng)下的文檔中可以看到,目前 PyTorch Hub 不支持 hub 一鍵式 fine-tuning,現(xiàn)有模型的 finetuning 還是基于傳統(tǒng)的腳本式調(diào)參。


PaddleHub 在 Fine-tune 這一塊做的很完善,在前一個板塊也給大家詳細(xì)舉了示例講解,在 PaddleHub 的官方 GitHub 中,有非常詳細(xì)的 Fine-tune 教程,大家可以參考:


PaddleHub 圖像分類遷移:?

https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub圖像分類遷移教程?


PaddleHub 文本分類遷移:

https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub文本分類遷移教程


是否支持用戶自定義上傳模型


PyTorch Hub 支持,PaddleHub 不支持。我看了 https://pytorch.org/ 官網(wǎng)下的文檔,只需要在開源的模型代碼里增加了一個 hubconf.py,然后在 pytorch/hub 里提一個 pr,cr 后 merge 到 branch/tag 這個分支就 ok 了。方法非常簡單,代碼也不復(fù)雜。


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


PaddleHub 目前暫時還不支持用戶自己提交新模型,但后期應(yīng)該會支持這個功能,到時候希望大家能踴躍使用,push 自己的新模型。


總結(jié)一下四個維度的比較:



總之,從這四個維度上,我個人感覺 PyTorch Hub 更像一個小工具,幫助大家迅速試用一下開源的新模型,但是真正到實際應(yīng)用,還是要基于老的一套的 fine-tuning,不能直接從 hub 里調(diào)用 fine-tune 的 api,所以并不實用。從工業(yè)級實用的角度來說,PaddleHub 做的要更成熟一些,用戶可以更方便的使用 PaddleHub 來進行 Fine-tune。


下面,我們具體來看看 PaddleHub 如何直接使用命令行,調(diào)用一行代碼 show 出結(jié)果 &?使用 Finetune Api 來對模型進行微調(diào),并舉一個實例教大家一步一步實現(xiàn)。


一行命令調(diào)用,直接輸出結(jié)果


PaddleHub安裝


  • 環(huán)境依賴

    • Python==2.7 or Python>=3.5

    • PaddlePaddle>=1.4.0


  • 安裝

    • pip install paddlehub


命令行快速體驗


安裝好后,不需要進入 Python 環(huán)境 import 就可以直接先體驗 hub 的便捷,因為在 PaddleHub 中 hub 可以作為一個獨立的模塊直接運行。PaddleHub 目前包含圖像分類、目標(biāo)檢測、詞法分析、Transformer、情感分析五大類。


一行代碼預(yù)測


  • 分詞


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


  • 情感分析


#?使用百度Senta情感分析模型對句子進行預(yù)測?$?hub?run?senta_bilstm?--input_text?"老鐵666,帶你開黑"?[{'text':?'老鐵666,帶你開黑',?'sentiment_key':?'positive',?'sentiment_label':?2,?'positive_probs':?0.7206,?'negative_probs':?0.2794}]
$?hub?run?senta_bilstm?--input_text?"老鐵666,帶你開黑"?
[{'text':?'老鐵666,帶你開黑',?
'sentiment_key':?'positive',?'sentiment_label':?2,?'positive_probs':?0.72
06,?'negative_probs':?0.2794}]


  • 目標(biāo)檢測


#使用SSD檢測模型對圖片進行目標(biāo)檢測?hub?run?ssd_mobilenet_v1_pascal?--input_path?test_img_bird.jpg
hub?run?ssd_mobilenet_v1_pascal?--input_path?test_img_bird.jpg


檢測結(jié)果:



  • 圖像識別


#?使用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?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}]]


注:模型未下載時會先下載再預(yù)測,也可以先試用 hub install model_name 下載好模型再使用 hub run 預(yù)測,也可直接運行 hub run。hub 一共有十個命令,其他命令可參考 PaddleHub 命令行工具(參考文獻(xiàn) 2)。


支持29種模型


PaddleHub 目前支持 29 種模型,主要以 CV 和 NLP 模型為主,包括 NLP 目前最火的 BERT 和百度自己自己研發(fā)開源的 ERNIE,以及 CV 中的 ssd-mobilenet、resnet-50、resnet-152 等。


  • NLP預(yù)測


數(shù)據(jù)通過 —input_text 或—input_file 導(dǎo)入來實現(xiàn)單次預(yù)測和批量預(yù)測


#?單文本預(yù)測?hub?run?lac?--input_text?"今天是個好日子"?#?多文本分析?hub?run?lac?--input_file?test.txt
hub?run?lac?--input_text?"今天是個好日子"?
#?多文本分析?
hub?run?lac?--input_file?test.txt


  • CV預(yù)測


數(shù)據(jù)通過—input_path 或—input_file 導(dǎo)入來實現(xiàn)單次預(yù)測和批量預(yù)測


#?單張照片預(yù)測?hub?run?ssd_mobilenet_v1_pascal?--input_path?test.jpg?#?多張照片預(yù)測?hub?run?ssd_mobilenet_v1_pascal?--input_file?test.txt
hub?run?ssd_mobilenet_v1_pascal?--input_path?test.jpg?
#?多張照片預(yù)測?
hub?run?ssd_mobilenet_v1_pascal?--input_file?test.txt


支持遷移學(xué)習(xí),Fine-tune更Easy


Fine-tune全景圖


?PaddleHub+Finetune流程圖


?PaddleHub Finetune api


Fine-tune 是遷移學(xué)習(xí)中使用最多的方式之一,通常我們可以在預(yù)訓(xùn)練好的模型上進行微調(diào)來實現(xiàn)模型遷移,從而達(dá)到模型適應(yīng)新領(lǐng)域(Domain)數(shù)據(jù)的目的。上圖是做一個完整的遷移學(xué)習(xí)需要的步驟,下面舉個實例教大家如何用 PaddleHub 做圖像分類遷移學(xué)習(xí)。


1. 準(zhǔn)備工作


安裝 PaddlePaddle 和 PaddleHub


pip?install?paddlepaddle(?推薦安裝1.4.0版本以上)?pip?install?paddlehub
pip?install?paddlehub


2. 選擇模型


此處使用經(jīng)典的 ResNet-50 作為預(yù)訓(xùn)練模型。


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)"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. 準(zhǔn)備數(shù)據(jù)


#?直接用PaddleHub提供的數(shù)據(jù)集?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)
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


由于貓狗分類是一個二分類的任務(wù),而我們下載的分類 module 是在 ImageNet 數(shù)據(jù)集上訓(xùn)練的千分類模型,所以我們需要對模型進行簡單的微調(diào),把模型改造為一個二分類模型:


  • 獲取 module 的上下文環(huán)境,包括輸入和輸出的變量,以及 Paddle Program;

  • 量中找到特征圖提取層 feature_map;

  • 在 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]#?設(shè)置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())
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]#?設(shè)置
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 接口來進行模型訓(xùn)練,這個接口在 finetune 的過程中,會周期性的進行模型效果的評估,以便我們了解整個訓(xùn)練過程的性能變化。


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


訓(xùn)練過程中的性能數(shù)據(jù)會被記錄到本地,我們可以通過 VisualDL 來可視化這些數(shù)據(jù)。我們在 shell 中輸入以下命令來啟動 VisualDL,其中 ${HOST_IP} 為本機 IP,需要用戶自行指定。


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


啟動服務(wù)后,我們使用瀏覽器訪問 ${HOST_IP}:8989,可以看到訓(xùn)練以及預(yù)測的 loss 曲線和 accuracy 曲線。



最后再按照常規(guī)流程對模型進行預(yù)測即可。


參考資料


[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/



?



長按識別下方二維碼

免費申請Tesla V100算力卡

配合PaddleHub讓模型原地起飛





?


現(xiàn)在,在「知乎」也能找到我們了

進入知乎首頁搜索「PaperWeekly」

點擊「關(guān)注」訂閱我們的專欄吧



關(guān)于PaperWeekly


PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學(xué)術(shù)平臺。如果你研究或從事 AI 領(lǐng)域,歡迎在公眾號后臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。


總結(jié)

以上是生活随笔為你收集整理的一文带你看懂PaddleHub的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。