为了解决日益增长的论文可复现性需求,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, 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个特性:
每个模型文件可以被独立执行或实现某个功能
不需要除了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 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端体验。开发人员可以针对开发用例来浏览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/
-
Facebook
+关注
关注
3文章
1429浏览量
54741 -
深度学习
+关注
关注
73文章
5503浏览量
121152 -
pytorch
+关注
关注
2文章
808浏览量
13221
原文标题:一行代码即可调用18款主流模型!PyTorch Hub轻松解决论文可复现性
文章出处:【微信号:AI_era,微信公众号:新智元】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论