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

2021-01-15 新智元

新智元報導

來源:PyTorch

編輯:元子

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

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

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

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

PyTorch Hub是什麼?

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

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

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

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

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所說,只需要一行代碼即可使用。比如從GitHub裡加載一個模型:

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

加載一個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 modulepytorch_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 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

torchvision中,模型有3個特性:

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

最小化包依賴性可減少用戶加載模型時遇到的困難。以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有什麼區別?

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

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

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

!pip install "tensorflow_hub==0.4.0"!pip install "tf-nightly"import tensorflow as tfimport tensorflow_hub as hubtf.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端體驗。開發人員可以針對開發用例來瀏覽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/

相關焦點

  • 一行代碼安裝,TPU也能運行PyTorch,修改少量代碼即可快速移植
    現在福利來了,一個叫做Pytorch Lightning的項目,可以讓你幾乎修改代碼的情況下用上TPU。Pytorch Lightning已經上傳到PyPI,因此只需一行代碼就能安裝這個軟體。幾乎無需修改代碼首先讓我們來看一個MNIST圖像分類網絡的搭建,PyTorch的原始代碼和修改後的PyTorch Lightning代碼幾乎無異。我們只需將nn.Module替換為pl.LightningModule即可。作者表示,相比切換框架,用這種方法重構原來的代碼只需數小時的時間。
  • 強強聯合,Papers with Code攜手arXiv,上傳論文、提交代碼一步到位
    ,這或許有助於解決論文可復現性問題。最近,它又有了新舉措:與論文預印本平臺 arXiv 展開合作,支持在 arXiv 頁面上添加代碼連結。現在,arXiv 上機器學習論文摘要頁面的下方出現了一個 Code 按鈕,它可以連結論文相關的官方和社區代碼實現:arXiv 論文頁面新增的 Code 部分(Papers with Code 提供支持)。可提供官方代碼和社區代碼。
  • Pytorch中的分布式神經網絡訓練|pytorch|bat|拆分|調用_網易訂閱
    在GPU之間拆分模型:如果模型太大而無法容納在單個GPU的內存中,則需要在不同GPU之間拆分模型的各個部分。  1. 跨GPU進行批量拆分數據。當mini-batch太大而無法容納在單個GPU的內存中時,您需要將mini-batch拆分到不同的GPU上。跨GPU的模型拆分  跨GPU拆分模型非常簡單,不需要太多代碼更改。
  • PapersWithCode發布代碼完整性自查清單:想獲更多星,注意這五項
    可復現性是科學領域長期關注的話題,近期人工智慧和機器學習社區也對此投入了更多關注。例如 ICML、ICLR 和 NeurIPS 這些頂級學術會議都在努力推進將實驗代碼和數據作為評審材料的一部分提交,並鼓勵作者在評審或出版過程中提交代碼以幫助結果可復現。
  • 用Java實現目標檢測|PyTorch
    很多論文都選擇使用PyTorch去實現也證明了它在訓練方面的效率以及易用性。在PyTorch領域,儘管部署一個模型有很多選擇,可為Java開發人員準備的選項卻屈指可數。在過去,用戶可以用PyTorch C++ 寫JNI (Java Native Interface) 來實現這個過程。最近,PyTorch 1.4 也發布了試驗性的Java 前端。
  • PyTorch模型訓練特徵圖可視化(TensorboardX)
    最近復現的一篇論文一直都難以work,上了特徵圖可視化後一下子就找到了問題所在,所以今天想梳理一下PyTorch裡面的特徵圖可視化。大家都知道Tensorflow有一款非常優秀的可視化工具Tensorboard,而PyTorch自身沒有可視化功能,但是我們可以尋找替代品,即TensorBoardX。安裝過程不多介紹,詳見下面的參考連結,裡面相應有比較豐富的介紹。
  • CVPR論文經不起復現推敲?是學術會議水了還是我飄了
    原論文連結:https://arxiv.org/abs/1806.01817po主測試地址:https://github.com/michaelklachko/pnn.pytorchCVPR 論文復現發現問題下面,先讓我們細緻過一遍 po 主在復現這篇論文時發現的問題,他主要發現測試準確率計算無效,因此加噪聲或採用 1×1 的卷積也沒有更好的效果
  • 用Java實現目標檢測 | PyTorch
    很多論文都選擇使用PyTorch去實現也證明了它在訓練方面的效率以及易用性。在PyTorch領域,儘管部署一個模型有很多選擇,可為Java開發人員準備的選項卻屈指可數。在過去,用戶可以用PyTorch C++ 寫JNI (Java Native Interface) 來實現這個過程。
  • PyTorch中使用DistributedDataParallel進行多GPU分布式模型訓練
    先進的深度學習模型參數正以指數級速度增長:去年的GPT-2有大約7.5億個參數,今年的GPT-3有1750億個參數。雖然GPT是一個比較極端的例子但是各種SOTA模型正在推動越來越大的模型進入生產應用程式,這裡的最大挑戰是使用GPU卡在合理的時間內完成模型訓練工作的能力。為了解決這些問題,從業者越來越多地轉向分布式訓練。
  • 論文繪圖神器:一行代碼繪製不同期刊格式圖表,哈佛博士後開源
    他的解決辦法是:親自開發一個Matplotlib的補充包,增添scatter、notebook等其他軟體常用的繪圖工具,還支持一鍵調用符合IEEE等不同期刊要求的圖表格式。現在,這個論文神器已經在Github開源,@愛可可老師 也在微博推薦,收穫大量轉發好評。安裝工具包推薦使用Python3環境,並且要預裝Matplotlib原始包。
  • PyTorch框架歷史和特性更迭與安裝過程
    由於機器學習的主流語言是Python,相比之下,Lua語言比較小眾。Facebook在2016年發表了PyTorch最初的版本0.1.1(alpha-1版本),作為Torch向Python遷移的一個項目。在最初的版本中,PyTorch和Torch共享的是底層的C語言API庫,現在還可以在PyTorch原始碼裡看到TH、THC、THNN、THCUNN這些目錄,即來源於Torch的代碼。
  • 基於PyTorch的CV模型框架,北大學生出品TorchCV
    最近,一個名為 TorchCV 的計算機視覺模型框架站上了 GitHub 趨勢榜。項目連結:https://github.com/donnyyou/torchcv該庫提供了基於深度學習的大部分 CV 問題研究的原始碼,對於使用者來說,調用最常用、最為先進的計算機模型從此可以變得更加容易。
  • PyTorch最佳實踐,教你寫出一手風格優美的代碼
    本文將介紹PyTorch的最佳實踐和代碼風格都是怎樣的。雖然這是一個非官方的 PyTorch 指南,但本文總結了一年多使用 PyTorch 框架的經驗,尤其是用它開發深度學習相關工作的最優解決方案。請注意,我們分享的經驗大多是從研究和實踐角度出發的。
  • 百度開源業內首個口罩人臉檢測及分類模型
    2月13日,百度宣布免費開源業內首個口罩人臉檢測及分類模型。該模型可以有效檢測在密集人流區域中攜帶和未攜戴口罩的所有人臉,同時判斷該者是否佩戴口罩。目前已通過飛槳PaddleHub開源出來,廣大開發者用幾行代碼即可快速上手,免費調用。
  • 分離硬體和代碼、穩定 API,PyTorch Lightning 1.0.0 版本正式發布
    博客地址:https://medium.com/pytorch/pytorch-lightning-1-0-from-0-600k-80fc65e2fab0 GitHub 地址:https://github.com/PyTorchLightning/pytorch-lightningPyTorch Lightning 的運行原理和目標人工智慧的發展速度比單一框架發展要快得多
  • 十大至簡規則,用Jupyter Notebook寫代碼應該這樣來
    Jupyter Notebook 是一個非常常用的代碼編輯器,它非常適合做數據分析與代碼展示,很多雲服務也採用它作為代碼編輯器。此外,因為用這種編輯器看代碼比較輕鬆,文檔描述和輸出效果也能進一步幫助理解,很多研究者都會採用 Jupyter 作為解釋研究實現的工具。
  • PyTorch上也有Keras了,訓練模型告別Debug,只需專注數據和邏輯
    在這張圖中,灰色部分代表Lightning能自動完成的部分,而藍色的部分則能夠根據使用者的需求,被定義成任意底層模型,可以是你自己的新模型,也可以是預訓練模型,fast.ai架構等等。舉幾個例子好了。比如說,梯度下降。
  • Pytorch中的分布式神經網絡訓練
    在GPU之間拆分模型:如果模型太大而無法容納在單個GPU的內存中,則需要在不同GPU之間拆分模型的各個部分。跨GPU進行批量拆分數據。當mini-batch太大而無法容納在單個GPU的內存中時,您需要將mini-batch拆分到不同的GPU上。跨GPU的模型拆分跨GPU拆分模型非常簡單,不需要太多代碼更改。 在設置網絡本身時,可以將模型的某些部分移至特定的GPU。
  • 重磅| Torch7團隊開源PyTorch:Python優先的深度學習框架
    我們靈感來自關於這一主題的許多研究論文以及當前和過去的研究成果,比如 autograd、autograd、Chainer 等。你可以像使用 numpy / scipy / scikit-learn 那樣輕鬆地使用 PyTorch。你可以用你喜歡的庫和包(如 Cython 和 Numba)在 Python 中編寫新的神經網絡層。我們的目標是儘量讓你不用重新發明輪子。命令式體驗PyTorch 的設計思路是線性、直觀且易於使用。當你需要執行一行代碼時,它會忠實執行。PyTorch 沒有異步的世界觀。
  • 你上世紀寫的代碼現在還work嗎?挑戰者:我需要讀磁帶的機器
    他們提出要復現 43 篇論文,其中 28 篇形成了可復現報告。這些論文涉及的語言包括 C、R、Mathematica 和 Pascal 等等,還有一位參賽者復現的不是代碼,而是一個用 SBML(系統生物學標記語言)編寫的分子模型。當然,這條復現之路並沒有想像中那麼簡單,有人代碼找不到了,有人找到代碼也不知道怎麼運行。