當前位置:
首頁 > 新聞 > 一行代碼調用18款主流模型!PyTorch Hub輕鬆解決論文可復現性

一行代碼調用18款主流模型!PyTorch Hub輕鬆解決論文可復現性

一行代碼調用18款主流模型!PyTorch Hub輕鬆解決論文可復現性

【新智元導讀】為了解決日益增長的論文可復現性需求,Facebook推出了PyTorch Hub,類似TensorFlow Hub的一個模型共享庫,載入ResNet、BERT、GPT、VGG、PGAN還是MobileNet等經典模型只需一行代碼。用戶可以提交、瀏覽模型,極大的改善了論文的可復現性難題。

機器學習論文的可復現性一直是個難題。許多機器學習相關論文要麼無法復現,要麼難以重現。有時候論文讀者經常為了調用各種經典機器學習模型,還要重複造輪子。

一行代碼調用18款主流模型!PyTorch Hub輕鬆解決論文可復現性

隨著提交給arXiv以及各種會議上的論文數量開始暴漲,可復現性的重要性也越來越凸顯。

很多論文選擇隨文附上代碼和訓練模型,在一定程度上對使用者起到了幫助作用,但成效並不明顯。復現過程中,仍有大量工作需要論文讀者自己摸索。


PyTorch Hub是什麼?

近日,Facebook新推出了一個深度學習工具包:PyTorch Hub,這是一個簡單的API和工作流,提供基本的構建模塊從而可以改善機器學習研究的可重現性。

PyTorch Hub包含了一系列與圖像分類、圖像分割、生成以及轉換相關的預訓練模型庫,例如ResNet、BERT、GPT、VGG、PGAN、MobileNet等經典模型,

PyTorch Hub試圖以最傻瓜的方式,提高研究工作的復現性。有多簡單呢?圖靈獎得主Yann LeCun發推表示,只需要一行代碼就可以調用所有倉庫里的模型,通過一個pull請求來發布你自己的模型。

一行代碼調用18款主流模型!PyTorch Hub輕鬆解決論文可復現性

同時,PyTorch Hub整合了Google Colab,並集成了論文代碼結合網站Papers With Code,可以直接找到論文的代碼。

一行代碼調用18款主流模型!PyTorch Hub輕鬆解決論文可復現性

PyTorch Hub怎麼用?

復現別人的成果是PyTorch Hub主打功能,那麼具體怎麼樣用呢?PyTorch官方提出三步走策略:瀏覽可用模型;載入模型;探索已載入的模型。

瀏覽可用模型

直接用torch.hub.list() API列出所有可用的入口點即可。代碼示例:

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

載入模型

使用PyTorch載入模型很簡單,正如LeCun所說,只需要一行代碼即可使用。載入一個PyTorch預訓練的模型:

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

在此之外,我們還需要了解一些其它的相對比較複雜的事情,包括探索已載入的模型、復現別人成果的工作流,以及如何快速發布自己的模型。

探索已載入的模型

從PyTorch Hub載入模型後,可以使用dir(model)查看模型的所有可用方法,示例代碼:

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

還可以用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)
...

我自己的模型也能發嗎?

只需要在預訓練模型(包括模型定義及預訓練權重)加入一個hubconf.py文件,就可以通過PyTorch Hub將模型發布到GitHub倉庫。以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

torchvision中,模型有3個特性:

  • 每個模型文件可以被獨立執行或實現某個功能
  • 不需要除了PyTorch之外的任何軟體包(在hubconf.py中編碼為 dependencies[『torch』])
  • 他們不需要單獨的入口點,因為模型在創建時可以無縫地開箱即用

和TensorFlow Hub有什麼區別?

前Google Brain員工mat kelcey吐槽「Hub」這個詞簡直是機器學習模型項目的共享單詞,TensorFlow Hub了,PyTorch也Hub了。

那麼和PyTorch Hub相比,更早推出的TensorFlow Hub有什麼區別呢?

TensorFlow Hub是一個共享可重用的機器學習平台,主要面向開發者,谷歌希望TensorFlow Hub能夠為研究人員和開發人員提供一種便利的方式,能夠更方便的在社區中共享模型。從某種意義上來講,除了架構本身,共享預訓練模型的同時,也共享了開發模型的計算時間和數據集。

TensorFlow Hub還有一個非常關鍵的特性是它的Web端體驗。開發人員可以針對開發用例來瀏覽TF模塊,通過TensorFlow Hub推出新的Web體驗可以更容易的進行搜索和瀏覽,同時為multi-publisher平台奠定了基礎。

網址:

https://tfhub.dev/

從官方的介紹來看,TF Hub的出發點是開發用例,而PyTorch Hub的出發點是論文復現。目前看來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/

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 新智元 的精彩文章:

7大中國高科技被BBC評為世界之最,華為5G名列榜首!
《細胞》重磅連發:記憶可「遺傳」!神經活動影響後代基因表達

TAG:新智元 |