登陆

Facebook 发布 PyTorch Hub:一行代码完成经典模型调用!

admin 2019-06-17 368人围观 ,发现0个评论

作者 | Team PyTorch

译者 | Monanfei

责编 | 夕颜

出品 | AI科技大本营(ID: rgznai100)

6月11日,Facebook PyTorch 团队推出了全新 API PyTorch Hub,供给模型的根本构建模块,用于进步机器学习研讨的模型复现性。PyTorch Hub 包含一个经过预练习的模型库,内置对Colab的支撑,而且能够与Papers With Code 集成。别的重要的一点是,它的整个作业流程大大简化。

简化到什么程度呢?Facebook 首席 AI 科学家Yann LeCun 兼图灵奖图灵奖得主Yann LeCun宣告 Twitter强烈推荐,运用PyTorch Hub,无论是ResNet、BERT、GPT、VGG、PGAN 仍是 MobileNet 等经典模型,只需输入一行代码,就能完成一键调用。

Twitter 一发,马上引来很多网友评观念赞,并有网友表明期望看到PyTorch Hub 与TensorFlow Hub的差异。

这个模型聚合中心终究怎么呢?咱们来一探终究。

模型复现是许多范畴的根本要求,尤其是在与机器学习相关的邻域中。但是,许多机器学习相关的出版物,要么不行复现,要么难以复现。跟着出版物数量的不断增加(包含在 arXiv 上宣告的成数万篇论文,以及会议提交的很多论文),模型复现比以往任何时候都愈加重要。尽管这些出版物大多数都包含代码和练习好的模型,但假如用户想复现这些模型,还需求做很多的额定的作业。

今日,咱们很侥幸地宣告推出 PyTorch Hub,它是一个十分简略的API,而且具有极端简略的作业流程。它供给模型的根本构建模块,用于进步机器学习研讨的模型复现性。PyTorch Hub 包含一个经过预练习的模型库,专门用于促进研讨的可重复性和快速展开新的研讨。PyTorch Hub 内置了对 Colab的 支撑,而且能够与 Papers With Code 集成。现在 PyTorch Hub 已包含一系列广泛的模型,包含分类器和分割器、生成器、变换器等。

【开发者】发布模型

经过增加简略 hubconf.py文件,开发者能够将预练习的模型(模型界说和预练习的权重)发布到 GitHub 库房中。该文件供给了所支撑模型的枚举,以及运转这些模型的依靠环境列表。相关的比如能够拜见 torchvision、 huggingface-bert 和 gan-model-zoo 库房。

让咱们看看最简略的比如:torchvision’s hubconf.py:

1# Optional list of dependencieFacebook 发布 PyTorch Hub:一行代码完成经典模型调用!s required by the package

2dependencies = ['torch']

3

4frFacebook 发布 PyTorch Hub:一行代码完成经典模型调用!omtorchvision.models.alexnet importalexnet

5fromtorchvision.models.densenet importdensenet121, densenet169, densenet201, densenet161

6fromtorchvision.models.inception importinception_v3

7fromtorchvision.models.resnet importresnet18, resnet34, resnet50, resnet101, resnet152,

8resnext50_32x4d, resnext101_32x8d

9fromtorchvision.models.squeezenet importsqueezenet1_0, squeezenet1_1

10fromtorchvision.models.vgg importvgg11, vgg13, vgg16, vgg19, vgg11_bn, vgg13_bn, vgg16_bn, vgg19_bn

11fromtorchvision.models.segmentation importfcn_resnet101, deeplabv3_resnet101

12fromtorchvision.models.googlenet importgooglenet

13fromtorchvision.models.shufflenetv2 importshufflenet_v2_x0_5, shufflenet_v2_x1_0

14fromtorchvision.models.mobilenet importmobilenet_v2

在 torchvision中,各模型具有如下性质:

PyTorch Hub 将包的依靠性降到了最小,当运用者加载模型并当即进行试验时,该特性能够进步用户体会。

接下来咱们看一个较为杂乱的比如:HuggingFace’s BERT 模型,下面是该模型的 hubconf.py:

1dependencies = ['torch', 'tqdm', 'boto3', 'requests', 'regex']

2

3fromhubconfs.bert_hubconf imp十三星座ort(

4bertTokenizer,

5bertModel,

6bertForNextSentencePrediction,

7bertForPreTraining,

8bertForMaskedLM,

9bertForSequenceClassification,

10bertForMultipleChoice,

11bertForQuestionAnswering,

12bertForTokenClassification

13)

每个模型都需求创立一个接入点,一下代码用于指定 bertForMaskedLM模型的接入点,并回来预练习的模型权重。

1defbertForMFacebook 发布 PyTorch Hub:一行代码完成经典模型调用!askedLM(*args, **kwargs):

2"""

3BertForMaskedLM includes the BertModel Transformer followed by the

4pre-trained masked language modeling head.

5Example:

6...

7"""

8model = BertForMaskedLM.from_pretrained(*args, **kwargs)

9returnmodel

这些接入点能够作为杂乱模型的包装器,它们能够供给洁净且共同的协助Facebook 发布 PyTorch Hub:一行代码完成经典模型调用!文档字符串,支撑运用者挑选是否下载预练习权重(例如 pretrained=True),而且具有其它的特定功用,例如可视化。

创立好 hubconf.py 后,能够根据此模板发送 github 推送恳求 。PyTorch Hub 的方针是为研讨复现供给高质量、易于重复、高效的模型。因而,咱们或许会与开发者协作完善推送恳求,并在某些情况下回绝发布一些低质量的模型。一旦咱们接受了开发者的推送恳求,开发者的模型将很快出现在 Pytorch 中心网页上,然后供一切的用户阅读。

【用户】作业流程

作为用户,PyTorch Hub 供给十分简略的作业流程,用户只需求依照以下三个过程履行即可:(1)探究有价值的模型;(2)加载模型;(3)了解任何给定模型的可用办法。接下来,让咱们别离看看每个过程。

探究可用的接入点

用户能够运用 torch.hub.list()列出库房中一切可用的接入点。

1>>> torch.hub.list('pytorchFacebook 发布 PyTorch Hub:一行代码完成经典模型调用!/vision')

2>>>

3['alexnet',

4'deeplabv3_resnet101',

5'densenet121',

6...

7'vgg16',

8'vgg16_bn',

9'vgg19',

10'vgg19_bn']

值得注意的是,PyTorch Hub 还答应辅佐接入点(除了预练习模型)。例如,bertTokenizer 能够用于 BERT 模型中的预处理,这使得用户的作业流程愈加顺利。

加载模型

现在,咱们现已知道了 Hub中可用的模型,那么用户便能够运用 torch.hub.load()来加载模型接入点。该指令无需装置其他依靠包,此外,torch.hub.help()供给了怎么实例化模型的信息。

1print(torch.hub.help('pytorch/vision', 'deeplabv3_resnet101'))

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

因为开发者会不断修正 bug,改善模型,因而 PyTorch Hub 也供给了快捷的办法,使得用户能够十分容易地获取最新的更新:

1model= torch.hub.load(..., force_reload=True)

咱们信任,这些功用能够让开发者愈加专心于他们的研讨,而不用为这些繁琐的作业浪费时间。一起,这能够确保用户享用最新的模型。

从另一个方面来看,对用户而言,安稳性是十分重要的。因而,一些开发者会在其他分支上推送安稳的模型,而不是在 mater 分支上推送,这样能够确保代码的安稳性。例如,pytorch_GAN_zoo 在 hub分支上供给安稳的版别。

1model= torch.hub.load('facebookresearch/pytorch_GAN_zoo:hub', 'DCGAN', pretrained=True, useGPU=False)

请注意,hub.load()中的*args和 **kwargs用于实例化模型。在上面的比如中,pretrained=True以及 useGPU=False会被传递给模型的接入点。

探究加载的模型

从PyTorch Hub加载模型后,用户能够运用下面的作业流程找出模型的可用办法,并更好地了解运转该模型所需的参数。

dir(model)用于检查模型的一切可用办法。接下来,让咱们看看 bertForMaskedLM 可用的办法。

1>>> dir(model)

2>>>

3['forward'

4...

5'to'

6'state_dict',

7]

help(model.forward)用于展现模型运转所需的参数:

1>>> help(model.forward)

2>>>

3Help on method forward in modulepytorch_pretrained_bert.modeling:

4forward(input_ids, token_type_ids=None, attention_mask=None, masked_lm_labels=None)

5...

在 BERT 和 DeepLabV3 页面中,用户能够具体了解这些模型的运用办法。

其他探究的方法

PyTorch Hub中供给的模型支撑 Colab,而且直接链接在 Papers With Code上,只需单击即可运用。下面是一个很好的入门示例。

其他资源

原文链接:

https://pytorch.org/blog/towards-reproducible-research-with-pytorch-hub/

【END】

声明:该文观念仅代表作者自己,搜狐号系信息发布渠道,搜狐仅供给信息存储空间服务。
请关注微信公众号
微信二维码
不容错过
Powered By Z-BlogPHP