一行代码即可调用18款主流模型!PyTorch Hub轻松解决论文可复现性


新智元报道

来源: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 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 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 hub
tf.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/

原文发布于微信公众号 - 新智元(AI_era)

原文发表时间:2019-06-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券