PyTorch Hub發佈!一行代碼調用最潮模型,圖靈獎得主強推

曉查 安妮 發自 凹非寺
量子位 出品 | 公衆號 QbitAI

640?wx_fmt=png

爲了調用各種經典機器學習模型,今後你不必重複造輪子了。

剛剛,Facebook宣佈推出PyTorch Hub,一個包含計算機視覺、自然語言處理領域的諸多經典模型的聚合中心,讓你調用起來更方便。

有多方便?

圖靈獎得主Yann LeCun強烈推薦,無論是ResNet、BERT、GPT、VGG、PGAN還是MobileNet等經典模型,只需輸入一行代碼,就能實現一鍵調用。

640?wx_fmt=png

厲不厲害!

Facebook官方博客表示,PyTorch Hub是一個簡易API和工作流程,爲復現研究提供了基本構建模塊,包含預訓練模型庫

並且,PyTorch Hub還支持Colab,能與論文代碼結合網站Papers With Code集成,用於更廣泛的研究。

發佈首日已有18個模型“入駐”,獲得英偉達官方力挺。而且Facebook還鼓勵論文發佈者把自己的模型發佈到這裏來,讓PyTorch Hub越來越強大。

640?wx_fmt=jpeg

這個新工具一下子把不少程序員“圈了粉”。

短短几個小時,LeCun的推文就收穫了上千條贊,網友好評如潮,花式稱讚“Nice”“Great”“Wow”。

前Google Brain員工@mat kelcey調侃說,“Hub”這個詞是機器學習模型項目的共享詞麼?TensorFlow Hub前腳到,PyTorch Hub就來了~

網友@lgor Brigadir跟評說,可能是從GitHub開始流行的。

所以,這個一問世就引發大批關注的PyTorch Hub,具體有哪些功能,該怎麼用?來看看。

一行代碼就導入

PyTorch Hub的使用簡單到不能再簡單,不需要下載模型,只用了一個torch.hub.load()就完成了對圖像分類模型AlexNet的調用。

import torchmodel = torch.hub.load('pytorch/vision', 'alexnet', pretrained=True)model.eval() torch
model = torch.hub.load('pytorch/vision''alexnet', pretrained=True)
model.eval()

試看效果如何,可一鍵進入Google Colab運行。

640?wx_fmt=png

具體怎麼用,Facebook分別給用戶和發佈者提供了指南。

對於用戶

PyTorch Hub允許用戶對已發佈的模型執行以下操作:

1、查詢可用的模型;
2、加載模型;
3、查詢模型中可用的方法。

下面讓我們來看看每個應用的實例。

1、查詢可用的模型

用戶可以使用torch.hub.list()這個API列出repo中所有可用的入口點。比如你想知道PyTorch Hub中有哪些可用的計算機視覺模型:

>>> torch.hub.list('pytorch/vision')>>>['alexnet','deeplabv3_resnet101','densenet121',...'vgg16','vgg16_bn','vgg19', 'vgg19_bn']'pytorch/vision')
>>>
['alexnet',
'deeplabv3_resnet101',
'densenet121',
...
'vgg16',
'vgg16_bn',
'vgg19',
 'vgg19_bn']

2、加載模型

在上一步中能看到所有可用的計算機視覺模型,如果想調用其中的一個,也不必安裝,只需一句話就能加載模型。

model = torch.hub.load('pytorch/vision', 'deeplabv3_resnet101', pretrained=True)'pytorch/vision''deeplabv3_resnet101', pretrained=True)

至於如何獲得此模型的詳細幫助信息,可以使用下面的API:

print(torch.hub.help('pytorch/vision', 'deeplabv3_resnet101'))'pytorch/vision''deeplabv3_resnet101'))

如果模型的發佈者後續加入錯誤修復和性能改進,用戶也可以非常簡單地獲取更新,確保自己用到的是最新版本:

model = torch.hub.load(..., force_reload=True)True)

對於另外一部分用戶來說,穩定性更加重要,他們有時候需要調用特定分支的代碼。例如pytorch_GAN_zoo的hub分支:

model = torch.hub.load('facebookresearch/pytorch_GAN_zoo:hub', 'DCGAN', pretrained=True, useGPU=False)'facebookresearch/pytorch_GAN_zoo:hub''DCGAN', pretrained=True, useGPU=False)

3、查看模型可用方法

從PyTorch Hub加載模型後,你可以用dir(model)查看模型的所有可用方法。以bertForMaskedLM模型爲例:

>>> dir(model)>>>['forward'...'to''state_dict',]
>>>
['forward'
...
'to'
'state_dict',
]

如果你對forward方法感興趣,使用help(model.forward) 瞭解運行運行該方法所需的參數。

>>> help(model.forward)>>>Help on method forward in module pytorch_pretrained_bert.modeling:forward(input_ids, token_type_ids=None, attention_mask=None, masked_lm_labels=None)...
>>>
Help on method forward in module pytorch_pretrained_bert.modeling:
forward(input_ids, token_type_ids=None, attention_mask=None, masked_lm_labels=None)
...

PyTorch Hub中提供的模型也支持Colab。

進入每個模型的介紹頁面後,你不僅可以看到GitHub代碼頁的入口,甚至可以一鍵進入Colab運行模型Demo。

640?wx_fmt=png

對於模型發佈者

如果你希望把自己的模型發佈到PyTorch Hub上供所有用戶使用,可以去PyTorch Hub的GitHub頁發送拉取請求。若你的模型符合高質量、易重複、最有利的要求,Facebook官方將會與你合作。

一旦拉取請求被接受,你的模型將很快出現在PyTorch Hub官方網頁上,供所有用戶瀏覽。

目前該網站上已經有18個提交的模型,英偉達率先提供支持,他們在PyTorch Hub已經發布了Tacotron2和WaveGlow兩個TTS模型。

640?wx_fmt=png

發佈模型的方法也是比較簡單的,開發者只需在自己的GitHub存儲庫中添加一個簡單的hubconf.py文件,在其中枚舉運行模型所需的依賴項列表即可。

比如,torchvision中的hubconf.py文件是這樣的:

# Optional list of dependencies required by the packagedependencies = ['torch']from torchvision.models.alexnet import alexnetfrom torchvision.models.densenet import densenet121, densenet169, densenet201, densenet161from torchvision.models.inception import inception_v3from torchvision.models.resnet import resnet18, resnet34, resnet50, resnet101, resnet152,\resnext50_32x4d, resnext101_32x8dfrom torchvision.models.squeezenet import squeezenet1_0, squeezenet1_1from torchvision.models.vgg import vgg11, vgg13, vgg16, vgg19, vgg11_bn, vgg13_bn, vgg16_bn, vgg19_bnfrom torchvision.models.segmentation import fcn_resnet101, deeplabv3_resnet101from torchvision.models.googlenet import googlenetfrom torchvision.models.shufflenetv2 import shufflenet_v2_x0_5, shufflenet_v2_x1_0from torchvision.models.mobilenet import mobilenet_v2
dependencies = ['torch']

from torchvision.models.alexnet import alexnet
from torchvision.models.densenet import densenet121, densenet169, densenet201, densenet161
from torchvision.models.inception import inception_v3
from torchvision.models.resnet import resnet18, resnet34, resnet50, resnet101, resnet152,\
resnext50_32x4d, resnext101_32x8d
from torchvision.models.squeezenet import squeezenet1_0, squeezenet1_1
from torchvision.models.vgg import vgg11, vgg13, vgg16, vgg19, vgg11_bn, vgg13_bn, vgg16_bn, vgg19_bn
from torchvision.models.segmentation import fcn_resnet101, deeplabv3_resnet101
from torchvision.models.googlenet import googlenet
from torchvision.models.shufflenetv2 import shufflenet_v2_x0_5, shufflenet_v2_x1_0
from torchvision.models.mobilenet import mobilenet_v2

Facebook官方向模型發佈者提出了以下三點要求:

1、每個模型文件都可以獨立運行和執行
2、不需要PyTorch以外的任何包
3、不需要單獨的入口點,讓模型在創建時可以無縫地開箱即用

Facebook還建議發佈者最小化對包的依賴性,減少用戶加載模型進行實驗的阻力。

支持公開代碼,從頂會做起

就在PyTorch Hub上線的同時,學術會議ICML 2019也開始在加州長灘舉行。

和Facebook的理念相似,今年的ICML大會,首次鼓勵研究人員提交代碼以證明論文結果,增加了論文可重複性作爲評審考察的因素,

也就是說,開放代碼更容易讓你的論文通過評審

此前,挪威科技大學計算機科學家Odd Erik Gundersen調查後發現,過去幾年在兩個AI頂會上提出的400種算法中,只有6%的研究有公開代碼。這就讓長江後浪的直接調用非常困難了。

640?wx_fmt=jpeg

ICML的政策也是順應了不少研究人員的心聲,這個政策施行的效果還不錯。

據ICML 2019大會協同主席Kamalika Chaudhuri等人進行的統計顯示,今年大約36%的提交論文和67%的已接受論文都共享了代碼。

其中,來自學術界的研究人員的貢獻熱情比產業界高得多,學術界提交的作品中有90%的研究包含代碼,而產業界只有27.4%。

640?wx_fmt=jpeg

與之相比,NeurIPS 2018的已接收論文中,只有不到一半的論文附上了代碼。

總之,對於AI領域的長遠發展來說,這是個大好現象~

傳送門

官方介紹博客:
https://pytorch.org/blog/towards-reproducible-research-with-pytorch-hub/

測試版PyTorch Hub:
https://pytorch.org/hub

PyTorch Hub的GitHub主頁:
https://github.com/pytorch/hub

AI內參|關注行業發展

640?wx_fmt=jpeg

AI社羣|與優秀的人交流

640?wx_fmt=jpeg640?wx_fmt=jpeg

量子位 QbitAI · 頭條號簽約作者

վ'ᴗ' ի 追蹤AI技術和產品新動態

喜歡就點「好看」吧 !

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章