PyTorch 最新版发布:API 变动,增加新特征,多项运算和加载速度提升

【新智元导读】PyTorch 发布了最新版,API 有一些变动,增加了一系列新的特征,多项运算或加载速度提升,而且修改了大量bug。官方文档也提供了一些示例。

API 改变

  • torch.range 已被弃用,取代的是 torch.arange,这与 numpy 和 python 范围一致。
  • 在稀疏张量上,contiguous 被重命名为 coalesce,coalesce 已经不合适。(注意 Sparse API 仍然是实验性而且在演变中,所以我们不提供向后兼容性)。

新的特征

新的层和函数

  • torch.topk 现在支持所有 CUDA 类型,不仅是 torch.cuda.FloatTensor。
  • 增加了一个 三路排序损失:nn.TripletMarginLoss
  • 增加了每个实例的归一化层:nn.InstanceNorm1d, nn.InstanceNorm2d, nn.InstanceNorm3d 每个通道都被作为一个实例进行归一化处理,并进行均值消减和标准差。这在处理需要类似 BatchNorm 效果的较大的图像和较小的 mini-batches 时很有用。
  • 增加了 nn.ZeroPad2d 和 nn.ConstantPad2d
  • 增加了 nn.Bilinear,计算 Y = X1 * W * X2 + b

支持所有函数的负维

使用维度参数的每个函数也允许采取负维(negative dimensions)。负维将索引上个维度的张量。

例如:

这里,由于x具有3维,并且dim = -1,因此最后一个维度,即 dim = 3 被采用来得到平均值。

具有维度参数的函数有:

CUDA 支持稀疏张量,更快的 CPU sparse

新版本中 torch.sparse API 的一部分也支持 torch.cuda.sparse。* Tensor。

CUDA 支持的函数有:

利用这些稀疏函数,nn.Embedding 现在也在 CUDA 上支持 sparse(使用 sparse = True 标志)。

一种新的混合矩阵乘法 hspmm,将稀疏矩阵与密集矩阵相乘,并以混合张量的形式(即1个稀疏维度,1个密集维度)返回1个矩阵。

几个CPU稀疏函数具有更高效的实现。

这里有一个嵌入式分类器训练脚本,作者是@martinraison,我们可以对比 CUDA sparse 和 CUDA dense 的表现。(http://t.cn/RaZcltA

named_parameters 过滤特定的参数类型

假设你想为模型除 biases 外的所有参数增加权重衰减(weight decay),怎样只获得模型的 biases?

这里我们引入了 nn.Module.named_parameters,它结合 named_children 和 named_modules 来帮助过滤模型的特定属性。

例子:过滤一个模型的 biases, weight_decay 为0

性能提升

  • 在适当的情况下,通过使用一些 thrust primitives,cumsum 和 cumprod 在GPU上显着加快了。
  • 通过一个 fused kernel,LSTMCell 和 GRUCELL 在GPU上显着加快了。
  • CuDNN 的默认算法更改为 PRECOMP_GEMM,这是一个更快的算法,需要的工作空间很小。这个之前是 IMPLICIT_GEMM,占用的工作空间为0,但是慢很多。
  • 通过将 batches 直接整到共享内存中,数据加载速度提升了 5%~10%。
  • 通过分治法(sgesdd)在 GPU 上计算 SVD,加速了2~5倍。
  • 常用的函数 expand 移到 C,在较小的模型中具有更好的性能。

Bug 修复

  • Added contiguous checks on weight and bias for a large range of THNN functions
  • make the range of random_ correct when both lower and upper bound are specified
  • parallel_apply now can take arguments that are unhashable
  • Reshape grad correctly in the Dot function (inputs don't have to be 1D vectors...)
  • Added Variable.type_as
  • Unify argument names of norm and renorm to have p=norm_type, dim=dim
  • btrisolve works on CPU doubles
  • ipython autocomplete for torch.nn.Module fixed via implementing __dir__
  • device_ids can now be None again in F.data_parallel and will use all available GPUs
  • workaround cudnn bugs in BatchNorm (<5.1.10) and Dilation (6.0.20)
  • Padding bugfix in Conv1d CPU
  • remainder and cremainder are fixed for integer types
  • fix memory leak in btrisolve and getri
  • If nn.Module's source cant be retrieved because of any exception,
  • handle serialization to be non-fatal
  • collate_fn now retains the type of the numpy array
  • is_tensor and is_storage are now fixed for old-style Python classes
  • torch.cat now supports keyword arguments
  • CUDA collectives supported coalescing, but the inputs were all assumed
  • to be of the same Tensor type. This is fixed.
  • Fix a deadlock bug in autograd because of an underlying glibc bug in specific
  • linux distros (ArchLinux in particular)
  • abs is now fixed for char and short cuda types
  • fix torch.diag autograd when giving a dimension argument
  • fix grouped convolution on CPU when bias=False
  • expose dilated convolutions for ConvTranspose*d
  • Fix a bug in HingeEmbeddingLoss where margin can now be specified via kwargs

下载源码:https://github.com/pytorch/pytorch/releases

原文发布于微信公众号 - 新智元(AI_era)

原文发表时间:2017-05-04

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏吉浦迅科技

DAY19:阅读纹理内存之Texture Gather

42040
来自专栏区块链

15分钟破解网站验证码

概述   很多开发者都讨厌网站的验证码,特别是写网络爬虫的程序员,而网站之所以设置验证码,是为了防止机器人访问网站,造成不必要的损失。现在好了,随着机器学习技术...

25470
来自专栏机器之心

从框架优缺点说起,这是一份TensorFlow入门极简教程

24080
来自专栏ATYUN订阅号

如何用pycococreator将自己的数据集转换为COCO类型

在如今深度学习的领域中,如果把数据比作老K,用以确保数据格式正确的就是Q,或者至少也得是J或者10,由此你可以看出它相当重要。在努力收集图像并注释所有的对象之后...

28150
来自专栏数说戏聊

Tableau基础知识1.文件与数据1.1 Tableau文件类型2.制表3.绘图

15320
来自专栏CreateAMind

神经网络图灵机(Neural Turing Machines, NTM)论文完整翻译

Alex Graves gravesa@google.com Greg Wayne gregwayne@google.com Ivo Danihelka dan...

11320
来自专栏算法修养

文本分类学习 (十)构造机器学习Libsvm 的C# wrapper(调用c/c++动态链接库)

前言: 对于SVM的了解,看前辈写的博客加上读论文对于SVM的皮毛知识总算有点了解,比如线性分类器,和求凸二次规划中用到的高等数学知识。然而SVM最核心的地方应...

11220
来自专栏人工智能

Redis-ML简介(第5部分)

原文地址:https://dzone.com/articles/an-introduction-to-redis-ml-part-five-redis-labs

1.2K90
来自专栏程序员互动联盟

【专业技术】OpenGL操作技巧介绍

存在问题: opengl中如何渲染管线? 解决方案: 绝大数OpenGL实现都有相似的操作顺序,一系列相关的处理阶段称为OpenGL渲染管线。图1-2显示了这些...

30020
来自专栏落影的专栏

OpenGL光照学习以及OpenGL4环境

前言 最近稍有空闲,整理下之前学习光照的笔记,以及在配置OpenGL4环境过程中遇到的问题。 光照 1、模拟灯光 模拟灯光:通过GPU来计算场景中的几何图...

42370

扫码关注云+社区

领取腾讯云代金券