為了解決日益增長的論文可復現(xiàn)性需求,F(xiàn)acebook推出了PyTorch Hub,類似TensorFlow Hub的一個模型共享庫,加載ResNet、BERT、GPT、VGG、PGAN還是MobileNet等經(jīng)典模型只需一行代碼。用戶可以提交、瀏覽模型,極大的改善了論文的可復現(xiàn)性難題。
機器學習論文的可復現(xiàn)性一直是個難題。許多機器學習相關論文要么無法復現(xiàn),要么難以重現(xiàn)。有時候論文讀者經(jīng)常為了調用各種經(jīng)典機器學習模型,還要重復造輪子。
隨著提交給arXiv以及各種會議上的論文數(shù)量開始暴漲,可復現(xiàn)性的重要性也越來越凸顯。
很多論文選擇隨文附上代碼和訓練模型,在一定程度上對使用者起到了幫助作用,但成效并不明顯。復現(xiàn)過程中,仍有大量工作需要論文讀者自己摸索。
PyTorch Hub是什么?
近日,F(xiàn)acebook新推出了一個深度學習工具包:PyTorch Hub,這是一個簡單的API和工作流,提供基本的構建模塊從而可以改善機器學習研究的可重現(xiàn)性。
PyTorch Hub包含了一系列與圖像分類、圖像分割、生成以及轉換相關的預訓練模型庫,例如ResNet、BERT、GPT、VGG、PGAN、MobileNet等經(jīng)典模型,
PyTorch Hub試圖以最傻瓜的方式,提高研究工作的復現(xiàn)性。有多簡單呢?圖靈獎得主Yann LeCun發(fā)推表示,只需要一行代碼就可以調用所有倉庫里的模型,通過一個pull請求來發(fā)布你自己的模型。
同時,PyTorch Hub整合了Google Colab,并集成了論文代碼結合網(wǎng)站Papers With Code,可以直接找到論文的代碼。
PyTorch Hub怎么用?
復現(xiàn)別人的成果是PyTorch Hub主打功能,那么具體怎么樣用呢?PyTorch官方提出三步走策略:瀏覽可用模型;加載模型;探索已加載的模型。
瀏覽可用模型
直接用torch.hub.list() API列出所有可用的入口點即可。代碼示例:
>>> torch.hub.list('pytorch/vision')>>>['alexnet','deeplabv3_resnet101','densenet121',...'vgg16','vgg16_bn','vgg19', 'vgg19_bn']
加載模型
使用PyTorch加載模型很簡單,正如LeCun所說,只需要一行代碼即可使用。比如從GitHub里加載一個模型:
mode = torch.hub.load(github, model, force_reload=False, *args, **kwargs)
加載一個PyTorch預訓練的模型:
model=torch.hub.load('pytorch/vision','deeplabv3_resnet101',pretrained=True)
在此之外,我們還需要了解一些其它的相對比較復雜的事情,包括探索已加載的模型、復現(xiàn)別人成果的工作流,以及如何快速發(fā)布自己的模型。
探索已加載的模型
從PyTorch Hub加載模型后,可以使用dir(model)查看模型的所有可用方法,示例代碼:
>>> dir(model)>>>['forward'...'to''state_dict',]
還可以用help(model.forward)對運行該模型所需參數(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)...我自己的模型也能發(fā)嗎?
只需要在預訓練模型(包括模型定義及預訓練權重)加入一個hubconf.py文件,就可以通過PyTorch Hub將模型發(fā)布到GitHub倉庫。以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, esnext50_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
torchvision中,模型有3個特性:
每個模型文件可以被獨立執(zhí)行或實現(xiàn)某個功能
不需要除了PyTorch之外的任何軟件包(在hubconf.py中編碼為 dependencies[‘torch’])
他們不需要單獨的入口點,因為模型在創(chuàng)建時可以無縫地開箱即用
最小化包依賴性可減少用戶加載模型時遇到的困難。以HuggingFace’s BERT為例:
dependencies = ['torch', 'tqdm', 'boto3', 'requests', 'regex']from hubconfs.bert_hubconf import (bertTokenizer,bertModel,bertForNextSentencePrediction,bertForPreTraining,bertForMaskedLM,bertForSequenceClassification,bertForMultipleChoice,bertForQuestionAnswering,bertForTokenClassification和TensorFlow Hub有什么區(qū)別?
前Google Brain員工mat kelcey吐槽“Hub”這個詞簡直是機器學習模型項目的共享單詞,TensorFlow Hub了,PyTorch也Hub了。
那么和PyTorch Hub相比,更早推出的TensorFlow Hub有什么區(qū)別呢?
TensorFlow Hub是一個共享可重用的機器學習平臺,主要面向開發(fā)者,谷歌希望TensorFlow Hub能夠為研究人員和開發(fā)人員提供一種便利的方式,能夠更方便的在社區(qū)中共享模型。從某種意義上來講,除了架構本身,共享預訓練模型的同時,也共享了開發(fā)模型的計算時間和數(shù)據(jù)集。示例代碼:
!pip install "tensorflow_hub==0.4.0"!pip install "tf-nightly"import tensorflow as tfimporttensorflow_hubashubtf.enable_eager_execution()module_url = "https://tfhub.dev/google/tf2-preview/nnlm-en-dim128/1"embed = hub.KerasLayer(module_url)embeddings = embed(["A long sentence.", "single-word","http://example.com"])print(embeddings.shape)#(3,128)
TensorFlow Hub還有一個非常關鍵的特性是它的Web端體驗。開發(fā)人員可以針對開發(fā)用例來瀏覽TF模塊,通過TensorFlow Hub推出新的Web體驗可以更容易的進行搜索和瀏覽,同時為multi-publisher平臺奠定了基礎。
網(wǎng)址:
https://tfhub.dev/
從官方的介紹來看,TF Hub的出發(fā)點是開發(fā)用例,而PyTorch Hub的出發(fā)點是論文復現(xiàn)。目前看來TF Hub的內置模型更多一點;此外,TF Hub提供的web方式瀏覽模型的體驗更好,搜索模型更加方便。
相關資源,方便大家快速上手:
PyTorch Hub API手冊:
https://pytorch.org/docs/stable/hub.html
模型提交地址:
https://github.com/pytorch/hub
瀏覽可用模型:
https://pytorch.org/hub
在 Paper with Code 上瀏覽更多模型:
https://paperswithcode.com/
-
Facebook
+關注
關注
3文章
1429瀏覽量
54750 -
深度學習
+關注
關注
73文章
5503瀏覽量
121157 -
pytorch
+關注
關注
2文章
808瀏覽量
13225
原文標題:一行代碼即可調用18款主流模型!PyTorch Hub輕松解決論文可復現(xiàn)性
文章出處:【微信號:AI_era,微信公眾號:新智元】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論