当前位置: 首页 > 编程日记 > 正文

PyTorch Hub发布获Yann LeCun强推!一行代码调用经典模型

640?wx_fmt=jpeg


作者 | 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 等经典模型,只需输入一行代码,就能实现一键调用。

640?wx_fmt=png


Twitter 一发,立刻引来众多网友评论点赞,并有网友表示希望看到PyTorch Hub 与TensorFlow Hub的区别。


这个模型聚合中心到底如何呢?我们来一探究竟。

 

模型复现是许多领域的基本要求,尤其是在与机器学习相关的邻域中。然而,许多机器学习相关的出版物,要么不可复现,要么难以复现。随着出版物数量的不断增长(包括在 arXiv 上发表的成数万篇论文,以及会议提交的大量论文),模型复现比以往任何时候都更加重要。虽然这些出版物大多数都包含代码和训练好的模型,但如果用户想复现这些模型,还需要做大量的额外的工作。

 

今天,我们很荣幸地宣布推出 PyTorch Hub,它是一个非常简单的API,并且具有极其简单的工作流程。它提供模型的基本构建模块,用于提高机器学习研究的模型复现性。PyTorch Hub 包含一个经过预训练的模型库,专门用于促进研究的可重复性和快速开展新的研究。PyTorch Hub 内置了对 Colab的 支持,并且能够与 Papers With Code 集成。目前 PyTorch Hub 已包含一系列广泛的模型,包括分类器和分割器、生成器、变换器等。

       640?wx_fmt=png      

【开发者】发布模型


通过添加简单 hubconf.py 文件,开发者能够将预训练的模型(模型定义和预训练的权重)发布到 GitHub 仓库中。该文件提供了所支持模型的枚举,以及运行这些模型的依赖环境列表。相关的例子可以参见 torchvision、 huggingface-bert 和 gan-model-zoo 仓库。

 

让我们看看最简单的例子:torchvision’s hubconf.py:

 


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


  • 每个模型文件都能作为函数调用,或者独立执行

  • 除了 PyTorch 之外(在 hubconf.py 中编码为 dependencies['torch']),它们不需要任何其他包的支持

  • 不需要单独的接入点,因为模型在创建时可以无缝地接入


PyTorch Hub 将包的依赖性降到了最小,当使用者加载模型并立即进行实验时,该特性能够提高用户体验。

 

接下来我们看一个较为复杂的例子:HuggingFace’s BERT 模型,下面是该模型的 hubconf.py

 

1dependencies = ['torch''tqdm''boto3''requests''regex']
2
3from hubconfs.bert_hubconf import (
4    bertTokenizer,
5    bertModel,
6    bertForNextSentencePrediction,
7    bertForPreTraining,
8    bertForMaskedLM,
9    bertForSequenceClassification,
10    bertForMultipleChoice,
11    bertForQuestionAnswering,
12    bertForTokenClassification
13)


每个模型都需要创建一个接入点,一下代码用于指定 bertForMaskedLM 模型的接入点,并返回预训练的模型权重。


1def bertForMaskedLM(*args, **kwargs):
2    """
3    BertForMaskedLM includes the BertModel Transformer followed by the
4    pre-trained masked language modeling head.
5    Example:
6      ...
7    """

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


这些接入点可以作为复杂模型的包装器,它们能够提供干净且一致的帮助文档字符串,支持使用者选择是否下载预训练权重(例如 pretrained=True),并且具有其它的特定功能,例如可视化。

 

创建好 hubconf.py 后,可以根据此模板发送 github 推送请求 。PyTorch Hub 的目标是为研究复现提供高质量、易于重复、高效的模型。因此,我们可能会与开发者合作完善推送请求,并在某些情况下拒绝发布一些低质量的模型。一旦我们接受了开发者的推送请求,开发者的模型将很快出现在 Pytorch 中心网页上,从而供所有的用户浏览。


【用户】工作流程


作为用户,PyTorch Hub 提供非常简单的工作流程,用户只需要按照以下三个步骤执行即可:(1)探索有价值的模型;(2)加载模型;(3)了解任何给定模型的可用方法。接下来,让我们分别看看每个步骤。


探索可用的接入点


用户可以使用 torch.hub.list() 列出仓库中所有可用的接入点。

 

1>>> torch.hub.list('pytorch/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 module pytorch_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上,只需单击即可使用。下面是一个很好的入门示例。

        640?wx_fmt=png       

其他资源


  • PyTorch Hub API文档(https://pytorch.org/docs/stable/hub.html)

  • 提交模型(https://github.com/pytorch/hub)

  • 可用模型的更多信息(https://pytorch.org/hub)

  • 探索更多模型(https://paperswithcode.com/)


原文链接:

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


(*本文为 AI科技大本营编译文章,转载请微信联系 1092722531


精彩推荐



640?wx_fmt=png


6月29-30日,2019以太坊技术及应用大会 特邀以太坊创始人V神与以太坊基金会核心成员,以及海内外知名专家齐聚北京,聚焦前沿技术,把握时代机遇,深耕行业应用,共话以太坊2.0新生态。


扫码或点击阅读原文,既享优惠购票!


640?wx_fmt=jpeg


推荐阅读

  • Bert时代的创新:Bert在NLP各领域的应用进展 | 技术头条

  • 免费GPU哪家强?谷歌Kaggle vs. Colab

  • 高能!8段代码演示Numpy数据运算的神操作

  • Python编写循环的两个建议 | 鹅厂实战

  • Lambda 表达式有何用处?

  • 9年前他用1万个比特币买了两个披萨, 9年后他把当年的代码卖给了苹果,成为了 GPU 挖矿之父

  • TIOBE 6月编程语言排行榜:Python 势不可挡,或在四年之内超越Java、C

  • 漫威金刚狼男主弃影炒币了?



640?wx_fmt=png你点的每个“在看”,我都认真当成了喜欢

相关文章:

【会议纪要】非洲新经济-线下沙龙分享

沙龙 主题: 《解开非洲新经济神秘面纱》 时间: 2018年09月08日 14:00 ~ 15:00 地点: 杭州丰潭路 UXCoffee 背景: 随着中非合作峰会召开,非洲发展潜力越来越受到关注。。。许多人眼中的非洲是贫穷…

图像处理和图像识别中常用的matlab函数

下面仅给出函数的大概意思,详细用法见: help 函数名 或 matlab help 1、imread:read image from graphics file; 2、imshow:display image in Handle Graphics figure; 3、imwrite:write image…

Powershell管理Active Directory 复制和拓扑

Powershell管理Active Directory 复制和拓扑 Active Directory 的 Windows PowerShell (AD) 支持复制和拓扑管理。它包含了管理复制、站点、域和林、域控制器和分区的功能。过去的管理工具(如 AD 站点和服务管理单元与 repadmin.exe)的用户将发现如今也可…

实战 | 如何用最快的速度学会Dlib人脸识别开发?

作者 | 小宋是呢来源 | 转载自小宋是呢项目GitHub地址:https://github.com/xiaosongshine/dlib_face_recognition1.背景介绍Dlib是一个深度学习开源工具,基于C开发,也支持Python开发接口,功能类似于TensorFlow与PyTorch。但是由于…

matlab内存管理

转自:http://my.donews.com/deng/2006/09/24/vijgqxehmkxiruywdauvxyiafogtskeymhyw/ 用 Matlab 进行大规模科学计算或仿真时,内存是一个需要时常注意的问题。当你写的 Matlab 程序跳出“Out of Memory” 时,以下几点措施是需要优先考虑的解决…

Koa2和Redux中间件源码研究

一、Koa2中间件源码分析 在Koa2中,中间件被存放在一个数组中。 使用koa中,最常见的就是app.use(fn),use函数部分源码如下所示。首先中间件必须是个函数。若是generator函数,则需要进行转化。最后把该中间件推入middelaware数组中。…

matlab内存管理(二)

转自:http://hi.baidu.com/bi%CB%AB%C9%FA%BB%A8/blog/item/5ab86c38ac2f45e715cecbab.html 1,确保内存的连续性Matlab 中数组必须占用连续分配的内存段当无法为新建的数组分配连续的内存段的时候Out of Memory 就会出现由于反复分配和释放数组会使可用的…

校招经验分享—高考结束!校招还会远么~~

作者 | 石晓文来源 | 转载自小小挖掘机(ID: wAIsjwj)今天是6.11,高考已经结束了,那大考-校招还会远么?我们先来看一下去年的校招时间表:互联网大厂校招一般7月就开始了,也就是说!如果…

数据科学究竟是什么?

数据科学是一门将数据变得有用的学科。它包含三个重要概念: 统计机器学习数据挖掘/分析数据科学的定义 如果你回顾一下数据科学这个术语的[早期历史](),会发现有两个主题密切相连: 大数据意味着计算机的使用频率增加。统计学家很难将纸张上所…

SQL with NUll处理,Join系列,between,in对比exists以及少量题目

2019独角兽企业重金招聘Python工程师标准>>> 1.一些题目: 选择在每一组B值相同的数据中对应的a最大的记录的所有信息,(用于论坛每月排行榜) Selecta,b,c from tableta wherea(select max(a) from tabletb where tableb.b tableta.b ) 随机抽取出10条数据 Select to…

清华大学提出APDrawingGAN,人脸照片秒变艺术肖像画

作者 | 刘永进教授来源 | 转载自数据派THU(ID:DatapiTHU)清华大学提出APDrawingGAN,该项工作被CVPR 2019录取为oral paper。CVPR是计算机视觉和人工智能领域内的国际顶级会议,2019共收到投稿5160篇,录取1300篇&#xf…

图像处理和图像识别中常用的OpenCV函数

1. cvLoadImage:将图像文件加载至内存; 2. cvNamedWindow:在屏幕上创建一个窗口; 3. cvDestroyWindow:销毁显示图像文件的窗口; 4. cvDestroyAllWindows:销毁显示图像文件的所有窗口…

SQLServer之DEFAULT约束

原文:SQLServer之DEFAULT约束DEFAULT约束添加规则 1、若在表中定义了默认值约束,用户在插入新的数据行时,如果该行没有指定数据,那么系统将默认值赋给该列,如果我们不设置默认值,系统默认为NULL。 2、如果“默认值”字…

tmux/screen里面如何用鼠标滚轮来卷动窗口内容

tmux里面用鼠标滚轮来卷动窗口内容在 tmux里面,因为每个窗口(tmux window)的历史内容已经被tmux接管了,所以原来console/terminal提供的ShiftPgUp/PgDn所显示的内容并不是当前窗口的历史内容,所以要用C-b [ 进入copy-mode,然后才能…

图像空间变换--imtransform

转自:http://juyishaanxi.blog.163.com/blog/static/602733002010522105439617/(非原处)空间几何变换将(w,z)坐标系上的图像变换为(x,y)坐标系上的图像,可以表示为: (x,y) T{(w,z) 比如: (x,y) T{(w,z)} (w/2, z/2) 仿射变…

谷歌用1.2万个模型“推翻”现有无监督研究成果!斩获ICML 2019最佳论文

作者 | 夕颜、Just出品 | AI科技大本营(ID:rgznai100)6 月 11 日,在美国加州长滩举行的 ICML 公布了 2019 年最佳论文奖,来自苏黎世联邦理工大学、谷歌大脑等的团队和英国剑桥大学团队摘得最佳论文奖项,此外,大会还公布了 7 篇获最…

实战:掌握PyTorch图片分类的简明教程 | 附完整代码

作者 | 小宋是呢转载自CSDN博客1.引文深度学习的比赛中,图片分类是很常见的比赛,同时也是很难取得特别高名次的比赛,因为图片分类已经被大家研究的很透彻,一些开源的网络很容易取得高分。如果大家还掌握不了使用开源的网络进行训练…

python group()

正则表达式中,group()用来提出分组截获的字符串,()用来分组 import re a "123abc456" print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0) #123abc456,返回整体 print re.sea…

图像配准的方法

转自:http://blog.sina.com.cn/s/blog_4b9b714a0100d5k5.html 图像配准的方法 1 基于特征的图像配准 基于特征的图像配准首先提取图像信息的特征,然后以这些特征为模型进行配准。特征提取的结果是一含有特征的表和对图像的描述,每个特征由…

微软发布Visual Studio 2017 15.8

2019独角兽企业重金招聘Python工程师标准>>> 对于C#/VB/C项目,在Git分支检出和分支切换操作后不再需要重新加载解决方案,这加快了操作的完成。15.8支持新推出的F# 4.5,这无疑将会受到F#开发人员的欢迎。此外,用于F#项目…

推荐系统产品与算法概述 | 深度

作者丨gongyouliu转载自大数据与人工智能(ID:gh_b8b5b02c348b)作者在《推荐系统的工程实现》(点击蓝字可回顾)这篇文章的第五部分“推荐系统范式”中讲到工业级推荐系统有非个性化范式、完全个性化范式、群组个性化范式、标的物关…

【iOS-cocos2d-X 游戏开发之十六】Cocos2dx编译后的Android自动使用(-hd)高清图设置自适应屏幕...

本篇主要介绍Cocos2dx项目开发过程中或者说项目务必遇到的一些知识点(ps.貌似Himi博客写的都是务必的 :tx: Himi认为写别人没写的才更容易吸引人不是~) OK,不多说废话,第一个介绍的是修改项目配置让你的Android项目支…

matlab图像处理命令(一)

转自:http://blog.csdn.net/langyuewu/archive/2009/05/02/4144120.aspx(非原处) 1.applylut 功能: 在二进制图像中利用lookup表进行边沿操作. 语法: A applylut(BW,lut) 举例 lut makelut(sum(x(:)) 4,2); BW1 imread(text.tif); BW2 applylut(BW1,lut); imsh…

MYSQL 查询数据排序数据和分组数据

在mysql查询过程中,可以对数据进行过滤,也可以对数据进行排序,可以对数据分组,下面分别讲述排序数据和分组数据例子。1,数据的排序 使用 ORDER BYselect * from where id10 order by id (正序,倒序)正序 AS…

Oracle RAC系列之:利用srvctl管理RAC数据库

srvctl即Server Control,是Oracle提供的一个命令行工具,用以用于管理Oracle的RAC环境。srvctl在Oracle 9i中被引入,Oracle10g、11g对其功能进行了很大的增强和改进。下面介绍下此命令的简单用法。 一、 查看实例状态(srvctl statu…

matlab图像处理命令(二)

转自:http://blog.163.com/crazyzcs126/blog/static/1297420502010229104452729/ (非原处) 图像增强 1. 直方图均衡化的 Matlab 实现 1.1 imhist 函数 功能:计算和显示图像的色彩直方图 格式:imhist(I,n) imhist(X,map) 说明&#x…

10万人的1000万张图像,微软悄然删除最大公开人脸数据集

作者 | 神经小姐姐转载自HyperAI超神经(ID:HyperAI)前几日,微软静悄悄地删除了一个公开的名人图片数据集。这个本为世界上最大的公开人脸识别数据集,现在已经不能通过微软的渠道访问。这个数据集包含了 10 万张名人面部…

密码学原理学习笔记

攻击的类型: 唯密文攻击(COA):攻击者只知道密文 已知明文攻击(KPA):攻击者知道同一密钥下密文对应的明文。 选择明文攻击(CPA):攻击者可以事先任意选择一定数量的明文,让被攻击的加密算法加密,并得到相应的密文。 选择…

终于申请博客了

今天终于下定决心在51CTO博客安家了。以后要坚持不断的写博客。以此来督促自己不断的学习和总结。把自己所掌握的技术和过往经验总结出来。转载于:https://blog.51cto.com/weijishui/971044

一种二维条码图像处理流程

目前,二维条码主要分两类: (1)、堆叠式二维条码:PDF417、Code 49; (2)、矩阵式二维条码:QR Code、Maxicode、Data Matrix。 本条码类似于Maxicode,处理过程大致为: (1)、图像灰度化&#xff…