PyTorch 0.2发布:更多NumPy特性,高阶梯度、分布式训练等

李林 编译整理 量子位 报道 | 公众号 QbitAI

Facebook的机器学习框架(之一)PyTorch今天发布了新版本:0.2.0。

这一版本引入了NumPy风格的Broadcasting、Advanced Indexing,增加了高阶梯度和分布式PyTorch。

PyTorch的GitHub新版发布说明中介绍了0.2版的以下新特性:

NumPy风格的Tensor Broadcasting

Broadcasting是NumPy在算数运算中处理不同形状数组的一种方式,在特定条件下,比较小的数组会通过比较大的数组进行“广播”,来获得相应的形状。

PyTorch支持Broadcasting,让它的Tensor arguments无需复制数据,就能自动扩展到相同大小。

向量和变量的Advanced Indexing

Advanced Indexing也是一种NymPy特性。当选择对象obj为非元组序列对象、ndarray(数据类型是整数或布尔时)、至少包含一个序列对象或ndarray的元组时,Advanced Indexing会激活。

NumPy现在部分支持NymPy风格的Advanced Indexing,让用户可以用相同的“[]-style”运算,在向量的每个维度上选择任意索引,包括不邻近的索引和重复索引。

高阶梯度

PyTorch 0.2版本新增的高阶梯度计算支持torch.XXX函数和最流行的nnlayers,在下一版本中可能会支持更多类型。

为了支持高阶梯度,PyTorch 0.2引入了一种编写函数autograd.Function的新形式,向下兼容旧的函数编写形式。

分布式PyTorch

PyTorch推出了torch.distributed包,让用户能在多台机器之间交换tensor,进而支持将神经网络的训练扩展到多台机器上,也支持更大的小批次。

具分布式PyTorch具体能做什么呢?举个例子,它为实现Facebook今年6月发布的论文Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour,提供了基础。

论文地址:https://arxiv.org/abs/1706.02677

distributed包遵循MPI风格编程模型,这意味着可以通过send、recv、all_reduce等函数在节点之间交换tensor。

PyTorch还提供了一个ImageNet训练案例来进行说明:https://github.com/pytorch/examples/tree/master/imagenet

新的nn层

0.2版本有一些新特性:

引入forward_pre_hook,在调用forward函数之前执行用户指定的闭包。

方便访问非叶梯度;

DataParallel支持dicts作为输入。

还引入了一些新的层,例如:

通过F.grid_sample和F.affine_grid实现空间变换网络;

从论文Self-Normalizing Neural Networks(地址:https://arxiv.org/abs/1706.02515)引入了nn.SeLU and nn.AlphaDropout;

从论文Convolutional Sequence to Sequence Learning(地址:https://arxiv.org/abs/1705.03122)引入了nn.GLU;

通过torch.utils.weight_norm来实现权重归一化;

nn.EmbeddingBag:构建词袋模型时,执行一个嵌入后跟Sum或Mean是很常见的,对于可变长度序列,计算嵌入包设计masking。PyTorch 0.2的nn.EmbeddingBag能更有效率地计算嵌入式包,特别是对于可变长度序列。

除此之外,PyTorch 0.2还引入了torch中的新功能,新增几类autograd支持,并修复了一些bug,详情见:

GitHub上的0.2.0版发布说明 https://github.com/pytorch/pytorch/releases/tag/v0.2.0

官方文档 http://pytorch.org/docs/0.2.0/

下载地址:

zip: https://github.com/pytorch/pytorch/archive/v0.2.0.zip

tar.gz: https://github.com/pytorch/pytorch/archive/v0.2.0.tar.gz

原文发布于微信公众号 - 量子位(QbitAI)

原文发表时间:2017-08-07

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏take time, save time

你所能用到的BMP格式介绍(一)

这些说明是我担任学校多媒体技术助教自己编写的实验说明,呕心沥血结合C++详细介绍BMP格式。  原理篇: 一、编码的意义。        让我们从一个简单的问题...

35070
来自专栏coolblog.xyz技术专栏

科普:String hashCode 方法为什么选择数字31作为乘子

某天,我在写代码的时候,无意中点开了 String hashCode 方法。然后大致看了一下 hashCode 的实现,发现并不是很复杂。但是我从源码中发现了一...

717190
来自专栏Python小屋

三种Fibonacci数列第n项计算方法及其优劣分析

感谢国防科技大学刘万伟老师和中国传媒大学胡凤国两位老师提供的思路,文章作者不能超过8个字符,我的名字就写个姓吧,名字不写了^_^。另外,除了本文讨论的三种方法,...

34970
来自专栏大数据文摘

Python入门之数据处理——12种有用的Pandas技巧

24150
来自专栏程序员叨叨叨

8.3 入口函数

通常高级语言程序中只有一个入口函数,不过由于着色程序分为顶点程序和片断程序,两者对应着图形流水线上的不同阶段,所以这两个程序都各有一个入口函数。

18940
来自专栏数据派THU

独家 | 一文读懂R中的探索性数据分析(附R代码)

探索性数据分析(EDA)是数据项目的第一步。我们将创建一个代码模板来实现这一功能。

18120
来自专栏机器之心

资源 | Tensorlang:基于TensorFlow的可微编程语言

322110
来自专栏蜉蝣禅修之道

网络流算法Push-relabel的Python实现

39750
来自专栏Petrichor的专栏

深度学习: global pooling (全局池化)

今天看SPPNet论文时,看到“global pooling”一词,不是很明白是啥概念。上网查了一下定义,在StackOverflow 上找到了答案:

56530
来自专栏深度学习自然语言处理

【笔记】高效率但却没用过的一些numpy函数

最近在看源码的时候,碰到了一些大佬们常用,但自己暂时还没用过的numpy函数,特意来总结下。

7720

扫码关注云+社区

领取腾讯云代金券