选自PyTorch

机器之心编译

参与:思源、一鸣

经典预训练模型、新型前沿研究模型是不是比较难调用?PyTorch 团队今天发布了模型调用神器 PyTorch Hub,只需一行代码,BERT、GPT、PGAN 等最新模型都能玩起来。

项目地址:https://pytorch.org/hub

机器学习领域,可复现性是一项重要的需求。但是,许多机器学习出版成果难以复现,甚至无法复现。随着数量上逐年增长的出版成果,包括数以万计的 arXiv 文章和大会投稿,对于研究的可复现性比以往更加重要了。虽然许多研究都附带了代码和训练模型,尽管他们对使用者有所帮助,但仍然需要使用者自己去研究如何使用。

今天,PyTorch 团队发布了 PyTorch Hub,一个简单的 API 和工作流代码库,它为机器学习研究的复现提供了基础构建单元。PyTorch Hub 包括预训练模型库,专门用来帮助研究的复现、协助新研究的开展。它同时内置支持 Colab,集成 Papers With Code 网站,并已经有广泛的一套预训练模型,包括分类器、分割器、生成器和 Transformer 等等。

研究者发布模型

PyTorch Hub 支持在 GitHub 上发布预训练模型(定义模型结构和预训练权重),这只需要增加一个简单的 hubconf.py 文件。该文件会列举所支持的模型,以及模型需要的依赖项。

用户可以从以下代码仓库找到使用案例:

  • https://github.com/pytorch/vision/blob/master/hubconf.py

  • https://github.com/huggingface/pytorch-pretrained-BERT/blob/master/hubconf.py

  • https://github.com/facebookresearch/pytorch_GAN_zoo

现在,我们可以看看最简单的案例,torchvision 的 hubconf.py:

在 torchvision,模型有以下几部分:

  • 每个模型文件都可以独立的执行

  • 这些模型不依赖 PyTorch 以外的包(在 hubconf.py 中以及集成了相关依赖:dependencies['torch'])

  • 这些模型不需要单独的模型入口(entry-point),因为这些模型一经创建,就可以无缝地提取使用

减少包的依赖可以减少用户导入模型时出现的各种问题,而且这种导入可能只是临时的调用。一个直观的例子是 HuggingFace's BERT 模型。其 hubconf.py 文件如下:

每个模型都需要创建一个模型入口,以下指定了 bertForMaskedLM 模型入口,并希望获得预训练模型权重:

这些入口可以作为复杂模型的包装器,我们能提供注释文档或额外的帮助函数。最后,有了 hubconf.py,研究者就能发送 pull 请求。当 PyTorch 接受了该请求后,研究者的模型就会出现在 PyTorch Hub 页面上。

用户工作流

PyTorch Hub 允许用户只用简单的几步就完成很多任务,例如 1)探索可用模型;2)加载预训练模型;3)理解加载模型的方法与运行参数。下面让我们通过一些案例体会体会 PyTorch Hub 的便捷吧。

探索可用模型

我们可以使用 torch.hub.list() API 查看仓库内所有可用的模型。

注意,PyTorch 还允许使用预训练模型之外的辅助模块,例如使用 bertTokenizer 来完成 BERT 模型的预处理过程,它们都会使工作流更加顺畅。

加载模型

现在我们已经知道有哪些预训练模型,下面就可以使用 torch.hub.load() API 加载这些模型了。使用 API 加载模型时,它只需要一行命令,而不需要额外安装 wheel。另外,torch.hub.help() API 也能提供一些有用的信息来帮助演示如何使用预训练模型。

其实这些预训练模型会经常更新,不论是修复 Bug 还是提升性能。而 PyTorch Hub 令用户可以极其简单地获取最后的更新版:

PyTorch 团队相信这个特性能帮助预训练模型的拥有者减轻负担,即重复发布包的成本会降低,他们也能更加专注于研究(预训练模型)本身。此外,该特性对用户也有很大优势,我们可以快速获得最新的预训练模型。

另一方面,稳定性对于用户而言非常重要。因此,模型提供者能以特定的分支或 Tag 为用户提供支持,而不直接在 master 分支上提供。这种方式能确保代码的稳定性,例如 pytorch_GAN_zoo 可以用 hub 分支来支持对其模型的使用。

注意传递到 hub.load() 中的 args 和 kwargs,它们都用于实例化模型。在上面的例子中,pretrained=True 和 useGPU=False 都被赋予不同的预训练模型。

探索已加载模型

当我们从 PyTorch Hub 中加载了模型时,我们能从以下工作流探索可用的方法,并更好地理解运行它们需要什么样的参数。

dir(model) 方法可以查看模型的所有方法,下面我们可以看看 bertForMaskedLM 模型的可用方法。

help(model.forward) 方法将提供要令模型能正常跑,其所需要的参数。

下面提供了 BERT 和 DeepLabV3 两个例子,我们可以看看这些模型加载后都能怎样使用。

  • BERT:https://pytorch.org/hub/huggingface_pytorch-pretrained-bert_bert/

  • DeepLabV3:https://pytorch.org/hub/pytorch_vision_deeplabv3_resnet101/

PyTorch Hub 中的可用模型同样支持 Colab,它们都会连接到 Papers With Code 网站。

TensorFlow 和 PyTorch 你选谁?

此前 TensorFlow 也发布了 TensorFlow Hub,它同样用于发布、探索和使用机器学习模型中可复用的部分。最近关注便捷性的 TensorFlow 2.0 Beta 也已经发布,但很多读者还是倾向于使用 PyTorch。既然这两大框架越来越「相似」,那么我们到底该使用哪个?下面机器之心简要总结了这两个深度学习框架的发展历程,我们也相信,用哪个都能开发出想要的炫酷应用。

TensorFlow:

PyTorch:

TensorFlow 和 PyTorch 都是经典的机器学习代码库。随着学界和工业界对机器学习的需求的增长,两者的社区也在不断发展壮大。虽然 TensorFlow 是老牌的机器学习代码库,但由于 1.x 及之前版本存在的诸多问题,许多用户逐渐转向对用户友好、学习门槛低、使用方便的 PyTorch。在 2018 年,TensorFlow 逐渐意识到这一问题,并在 2.x 版本逐渐提升了用户体验。

与此同时,基于两个经典机器学习代码库的进一步工具开发也是近年来的趋势。过去有部分基于 TensorFlow 的 Keras 和基于 PyTorch 的 fast.ai,最近一两年则有大量的模型库和方便用户快速训练和部署模型的代码库,如 Tensor2Tensor,以及针对特定领域的代码库,如基于 PyTorch 的 NLP 代码库 PyText 和图神经网络库 PyG。

目前来看,TensorFlow 的生态系统更为多样和完善,且具有多语言的支持,其广受诟病的难以使用的缺点也在逐渐改善。另一方面,由于 PyTorch 本身用户友好的特性,基于这一代码库的应用开发进度似乎也赶上了 TensorFlow,尽管在多语言支持等方面 PyTorch 依然有较大差距。这一机器学习生态之战究竟会走向何方,目前尚不明朗。未来的机器学习代码框架的发展趋势是,模型的训练、部署工作量将会越来越低,类似「搭积木」方式的应用部署方式将会越来越流行。研究者和开发者的精力将会完全转向模型结构的设计、部署和完善,而非纠结于框架的选择和其他底层工程问题上。

参考链接:https://pytorch.org/blog/towards-reproducible-research-with-pytorch-hub/

市北·GMIS 2019全球数据智能峰会于7月19日-20日在上海市静安区举行。本次峰会以「数据智能」为主题,聚焦最前沿研究方向,同时更加关注数据智能经济及其产业生态的发展情况,为技术从研究走向落地提供借鉴。

本次峰会设置主旨演讲、主题演讲、AI画展、「AI00」数据智能榜单发布、闭门晚宴等环节,已确认出席嘉宾如下:

大会早鸟票已开售,我们也为广大学生用户准备了最高优惠的学生票,点击即刻报名。

pytorch 获取模型参数_剑指TensorFlow,PyTorch Hub官方模型库一行代码复现主流模型...相关推荐

  1. 字符串全排列算法_C#版_剑指OFFER

    字符串全排列算法_C#版_剑指OFFER 题目描述 ​题目描述 输入一个长度为 n 字符串,打印出该字符串中字符的所有排列,你可以以任意顺序返回这个字符串数组. 例如输入字符串ABC,则输出由字符A, ...

  2. 剑指 Offer 05. 替换空格(完整代码)

    文章目录 剑指 Offer 05. 替换空格 1. 核心代码 2. 完整代码 总结 剑指 Offer 05. 替换空格 请实现一个函数,把字符串 s 中的每个空格替换成"%20". ...

  3. python中myf什么意思_剑指Offer-Python题解(三)

    剑指Offer-Python题解(三) 45 扑克牌顺子 题目描述 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌 ...

  4. sklearn输出模型参数_如何使用sklearn优雅地进行数据挖掘?

    关注上方"数据挖掘工程师",选择星标, 关键时间,第一时间送达! 文章来自:天池大数据科研平台 一.使用sklearn数据挖掘 ‍‍ 1.数据挖掘的步骤 数据挖掘通常包括数据采集, ...

  5. 牛客网_剑指Offer_Python实现_更新中

    剑指Offer编程题汇总 第1题_二维数组中的查找 第2题_替换空格 第3题_从尾到头打印链表 第4题_重建二叉树 第5题_用两个栈实现队列 第6题_旋转数组的最小数字 第7题_斐波那契数列 第8题_ ...

  6. nginx 获取body参数_分布式实战:Nginx缓存之流量分发层

    本文首发于Ressmix个人站点:https://www.tpvlog.com 本章,我将进行Nginx流量分发层的lua代码编写.流量分发层的Nginx服务器,会基于商品id执行流量分发策略: 获取 ...

  7. java统计一个字符串中每个字符出现的次数_剑指offer算法题054:字符流中第一个不重复的字符...

    推荐阅读:宇宙条的工作总结:一年前还在面试找工作,一年后在面试找工作的学弟学妹们:第一次当面试官的经历分享小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合 ...

  8. 剑指offer最新版_剑指Offer——Java版本(持续更新)

    0 前言 邻近校招,算法要命!!! 本文为研究剑指Offer过程中的笔记,整理出主要思路以及Java版本题解,以便记忆和复习. 参考整理来自<剑指Offer 第二版>. 特别注意,对每道题 ...

  9. c语言一维数组逆序输出_剑指信奥 | C 语言之兵人来袭!

    趣乐博思剑指信奥系列 ❝ 趣乐博思剑指信奥系列,专门针对全国青少年信息学奥林匹克联赛 NOIP 而开展的专业教育方案.开设的课程有 C 语言基础,C++ 语言基础,算法设计入门与进阶,经典试题分析与详 ...

最新文章

  1. python拿什么做可视化界面好-用python打造可视化爬虫监控系统,酷炫的图形化界面...
  2. python语言特点有哪些-Python是什么?Python有什么特点?
  3. WinAPI: waveOutMessage - 向波形输出设备发送一条消息
  4. C 基本语法 | 菜鸟教程
  5. ubutun 更换网络源_「ubuntu脚本1」开启ssh替换第三方源开启tab键补齐屏蔽nouveau
  6. 如何使用apiPOST进行模拟发送get、post、delete、put请求(支持文件上传)
  7. 以太坊开发入门,完整入门篇
  8. java.math.BigInteger cannot be cast to java.lang.Long
  9. 人工智能学习——模糊控制
  10. Linux - zookeeper集群搭建
  11. Intel CPU(i3、i5、i7、i9)型号、性能详细解读
  12. stc单片机c语言程序头文件(stc12c5a60s2.h,stc12c5a60s2头文件在keil中没法用?
  13. 那个小白说他还没搞懂类和对象,我一怒之下把这篇文章扔给了他
  14. 华为mate50os鸿蒙,华为Mate50将如期发布,屏下镜头+鸿蒙OS,再见iPhone12
  15. Word动态输出多表格方案(以工资条为例)
  16. 单元测试用例 php,PHP 单元测试(PHPUnit)(2)
  17. Prism4学习笔记(七):State-Based Navigation QuickStart
  18. AtCoder Grand Contest 012 E Camel and Oases 状压dp
  19. 极光推送集成步骤及注意事项
  20. ZPL II 语言编程基础

热门文章

  1. 安卓之页面跳转与传值和按钮事件
  2. Toast 自定义位置和带图
  3. 北航计算机学硕还是专硕,2018北航计算机专硕总分第一录取经验
  4. python 如何建立图形用户界面_python(五)图形用户界面easyGUI入门
  5. 联想服务器 重装系统u盘启动,联想_Lenovo BIOS Setup Utility 设置U盘启动教程
  6. xpdf将pdf转换为html,(WordExcelPDF文件转换成HTML整理.docx
  7. 简述PHP中有哪些运算符,PHP运算符简述
  8. linux进程莫名其妙被kill,Linux进程突然被杀掉(OOM killer),查看系统日志
  9. 利用LED+LDR组成可控组件搭建的振荡电路
  10. 全模型组的测试初步结果