PyTorch Hub發(fā)布!一行代碼調(diào)用最潮模型,圖靈獎(jiǎng)得主強(qiáng)推
為了調(diào)用各種經(jīng)典機(jī)器學(xué)習(xí)模型,今后你不必重復(fù)造輪子了。
曉查 安妮 發(fā)自 凹非寺
量子位 出品 | 公眾號 QbitAI
為了調(diào)用各種經(jīng)典機(jī)器學(xué)習(xí)模型,今后你不必重復(fù)造輪子了。
剛剛,F(xiàn)acebook宣布推出PyTorch Hub,一個(gè)包含計(jì)算機(jī)視覺、自然語言處理領(lǐng)域的諸多經(jīng)典模型的聚合中心,讓你調(diào)用起來更方便。
有多方便?
圖靈獎(jiǎng)得主Yann LeCun強(qiáng)烈推薦,無論是ResNet、BERT、GPT、VGG、PGAN還是MobileNet等經(jīng)典模型,只需輸入一行代碼,就能實(shí)現(xiàn)一鍵調(diào)用。
厲不厲害!
Facebook官方博客表示,PyTorch Hub是一個(gè)簡易API和工作流程,為復(fù)現(xiàn)研究提供了基本構(gòu)建模塊,包含預(yù)訓(xùn)練模型庫。
并且,PyTorch Hub還支持Colab,能與論文代碼結(jié)合網(wǎng)站Papers With Code集成,用于更廣泛的研究。
發(fā)布首日已有18個(gè)模型“入駐”,獲得英偉達(dá)官方力挺。而且Facebook還鼓勵(lì)論文發(fā)布者把自己的模型發(fā)布到這里來,讓PyTorch Hub越來越強(qiáng)大。
這個(gè)新工具一下子把不少程序員“圈了粉”。
短短幾個(gè)小時(shí),LeCun的推文就收獲了上千條贊,網(wǎng)友好評如潮,花式稱贊“Nice”“Great”“Wow”。
前Google Brain員工@mat kelcey調(diào)侃說,“Hub”這個(gè)詞是機(jī)器學(xué)習(xí)模型項(xiàng)目的共享詞么?TensorFlow Hub前腳到,PyTorch Hub就來了~
網(wǎng)友@lgor Brigadir跟評說,可能是從GitHub開始流行的。
所以,這個(gè)一問世就引發(fā)大批關(guān)注的PyTorch Hub,具體有哪些功能,該怎么用?來看看。
一行代碼就導(dǎo)入
PyTorch Hub的使用簡單到不能再簡單,不需要下載模型,只用了一個(gè)torch.hub.load()就完成了對圖像分類模型AlexNet的調(diào)用。
import?torch
model?=?torch.hub.load(‘pytorch/vision’,?‘alexnet’,?pretrained=True)
model.eval()
試看效果如何,可一鍵進(jìn)入Google Colab運(yùn)行。
具體怎么用,F(xiàn)acebook分別給用戶和發(fā)布者提供了指南。
對于用戶
PyTorch Hub允許用戶對已發(fā)布的模型執(zhí)行以下操作:
1、查詢可用的模型;
2、加載模型;
3、查詢模型中可用的方法。
下面讓我們來看看每個(gè)應(yīng)用的實(shí)例。
1、查詢可用的模型
用戶可以使用torch.hub.list()這個(gè)API列出repo中所有可用的入口點(diǎn)。比如你想知道PyTorch Hub中有哪些可用的計(jì)算機(jī)視覺模型:
>>>?torch.hub.list(‘pytorch/vision’)
>>>
[‘alexnet’,
‘deeplabv3_resnet101’,
‘densenet121’,
…
‘vgg16’,
‘vgg16_bn’,
‘vgg19’,
‘vgg19_bn’]
2、加載模型
在上一步中能看到所有可用的計(jì)算機(jī)視覺模型,如果想調(diào)用其中的一個(gè),也不必安裝,只需一句話就能加載模型。
model?=?torch.hub.load(‘pytorch/vision’,?‘deeplabv3_resnet101’,?pretrained=True)
至于如何獲得此模型的詳細(xì)幫助信息,可以使用下面的API:
print(torch.hub.help(‘pytorch/vision’,?‘deeplabv3_resnet101’))
如果模型的發(fā)布者后續(xù)加入錯(cuò)誤修復(fù)和性能改進(jìn),用戶也可以非常簡單地獲取更新,確保自己用到的是最新版本:
model?=?torch.hub.load(…,?force_reload=True)
對于另外一部分用戶來說,穩(wěn)定性更加重要,他們有時(shí)候需要調(diào)用特定分支的代碼。例如pytorch_GAN_zoo的hub分支:
model?=?torch.hub.load(‘facebookresearch/pytorch_GAN_zoo:hub’,?‘DCGAN’,?pretrained=True,?useGPU=False)
3、查看模型可用方法
從PyTorch Hub加載模型后,你可以用dir(model)查看模型的所有可用方法。以bertForMaskedLM模型為例:
>>>?dir(model)
>>>
[‘forward’
…
‘to’
‘state_dict’,
]
如果你對forward方法感興趣,使用help(model.forward) 了解運(yùn)行運(yùn)行該方法所需的參數(shù)。
>>>?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)
…
PyTorch Hub中提供的模型也支持Colab。
進(jìn)入每個(gè)模型的介紹頁面后,你不僅可以看到GitHub代碼頁的入口,甚至可以一鍵進(jìn)入Colab運(yùn)行模型Demo。
對于模型發(fā)布者
如果你希望把自己的模型發(fā)布到PyTorch Hub上供所有用戶使用,可以去PyTorch Hub的GitHub頁發(fā)送拉取請求。若你的模型符合高質(zhì)量、易重復(fù)、最有利的要求,F(xiàn)acebook官方將會(huì)與你合作。
一旦拉取請求被接受,你的模型將很快出現(xiàn)在PyTorch Hub官方網(wǎng)頁上,供所有用戶瀏覽。
目前該網(wǎng)站上已經(jīng)有18個(gè)提交的模型,英偉達(dá)率先提供支持,他們在PyTorch Hub已經(jīng)發(fā)布了Tacotron2和WaveGlow兩個(gè)TTS模型。
發(fā)布模型的方法也是比較簡單的,開發(fā)者只需在自己的GitHub存儲(chǔ)庫中添加一個(gè)簡單的hubconf.py文件,在其中枚舉運(yùn)行模型所需的依賴項(xiàng)列表即可。
比如,torchvision中的hubconf.py文件是這樣的:
#?Optional?list?of?dependencies?required?by?the?package
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官方向模型發(fā)布者提出了以下三點(diǎn)要求:
1、每個(gè)模型文件都可以獨(dú)立運(yùn)行和執(zhí)行
2、不需要PyTorch以外的任何包
3、不需要單獨(dú)的入口點(diǎn),讓模型在創(chuàng)建時(shí)可以無縫地開箱即用
Facebook還建議發(fā)布者最小化對包的依賴性,減少用戶加載模型進(jìn)行實(shí)驗(yàn)的阻力。
支持公開代碼,從頂會(huì)做起
就在PyTorch Hub上線的同時(shí),學(xué)術(shù)會(huì)議ICML 2019也開始在加州長灘舉行。
和Facebook的理念相似,今年的ICML大會(huì),首次鼓勵(lì)研究人員提交代碼以證明論文結(jié)果,增加了論文可重復(fù)性作為評審考察的因素,
也就是說,開放代碼更容易讓你的論文通過評審。
此前,挪威科技大學(xué)計(jì)算機(jī)科學(xué)家Odd Erik Gundersen調(diào)查后發(fā)現(xiàn),過去幾年在兩個(gè)AI頂會(huì)上提出的400種算法中,只有6%的研究有公開代碼。這就讓長江后浪的直接調(diào)用非常困難了。
ICML的政策也是順應(yīng)了不少研究人員的心聲,這個(gè)政策施行的效果還不錯(cuò)。
據(jù)ICML 2019大會(huì)協(xié)同主席Kamalika Chaudhuri等人進(jìn)行的統(tǒng)計(jì)顯示,今年大約36%的提交論文和67%的已接受論文都共享了代碼。
其中,來自學(xué)術(shù)界的研究人員的貢獻(xiàn)熱情比產(chǎn)業(yè)界高得多,學(xué)術(shù)界提交的作品中有90%的研究包含代碼,而產(chǎn)業(yè)界只有27.4%。
與之相比,NeurIPS 2018的已接收論文中,只有不到一半的論文附上了代碼。
總之,對于AI領(lǐng)域的長遠(yuǎn)發(fā)展來說,這是個(gè)大好現(xiàn)象~
傳送門
官方介紹博客:
https://pytorch.org/blog/towards-reproducible-research-with-pytorch-hub/
測試版PyTorch Hub:
https://pytorch.org/hub
PyTorch Hub的GitHub主頁:
https://github.com/pytorch/hub