API更改
torch.range
被弃用,赞成torch.arange
与nump
y和python
范围一致。- 在稀疏的传感器上,
contiguous
更名为现在,coalesce
并且coalesce
现在已经不合适。 (提醒Sparse API
仍然是实验性和演进性的,所以我们不提供后向兼容性)。
新功能
新层次和功能
- torch.topk现在支持所有CUDA类型,不只是torch.cuda.FloatTensor。
- 增加了三路排名丢失:nn.TripletMarginLoss 添加每个实例规范化层:nn.InstanceNorm1d,1. nn.InstanceNorm2d,nn.InstanceNorm3d 每个通道被视为一个实例进行归一化,并且均值减去和标准化完成。当处理较大的图像和更小的迷你批次时,这对BatchNorm喜欢效果是有用的。
- nn.ZeroPad2d并nn.ConstantPad2d添加。
- nn.Bilinear 被添加,它计算 Y = X1 W X2 + b
负尺寸将从最后一维度索引张量。
使用维度参数的每个单个函数也将允许采取负面维度。
负尺寸将从最后一维度索引张量。
例如:
x = torch.randn(10, 20, 30)
y = torch.mean(x, dim = -1)
在这里,由于x
具有3个维度,而dim = -1
是最后一个维度,即dim=3
采取平均值。
具有维参数的函数是:
narrow, transpose, size, cat, chunk, gather, index_select, split, squeeze,
stack, unbind, unsqueeze, cumprod, cumsum, mean, median, mode, norm, prod, std,
sum, var, kthvalue, max, min, sort, topk, renorm,
index_add, index_copy, index_fill, scatter, select, unfold
CUDA支持sparse传感器,CPU速度更快
现在torch.sparse
也支持API 的一部分torch.cuda.sparse.*Tensor
。
CUDA支持的功能有:
sparse_mask, to_dense, coalesce, transpose, spaddmm
spcadd, mul, div, cadd, csub, cmul
nn.Embedding
现在支持sparse
,即使在使用sparse=True
这些sparse
函数的CUDA(带标志)上也是如此。
一种新的混合矩阵乘法hspmm
运算,将sparse
矩阵与密集矩阵相乘,并以混合张量(即1个sparse
维度,1个dense
维度)的形式返回一个矩阵。
几个CPU稀疏函数具有更高效的实现。
在一个很快被黑客入侵的@martinraison嵌入分类器训练脚本我们看到CUDAsparse
表现以及CUDA密集:https : //gist.github.com/martinraison/1e7c18c6f6eda87f1cb4995b0e6a22a5
不同处理时间对比:
-
CPU CUDA Dense 10 0.86 Sparse 0.15 0.13
named_parameters来过滤特定的参数类型
假设您想为模型的所有参数添加重量衰减,除了偏差。您如何只获得模型的偏见?为此 引入了nn.Module.named_parameters。 它加入named_children
并named_modules
帮助您过滤模型的特定属性。
过滤模型的偏差并给它们weight_decay为0的示例:
import torch
import torch.nn as nn
import torch.optim as optim
m = nn.Sequential(
nn.Linear(10, 20),
nn.ReLU(),
nn.Linear(20, 20),
nn.ReLU(),
)
weights, biases = [], []
for name, p in m.named_parameters():
if 'bias' in name:
biases += [p]
else:
weights += [p]
optim.SGD([
{'params': weights},
{'params': biases, weight_decay=0}
], lr=1e-2, momentum=0.9, weight_decay=1e-5)
性能改进
cumsum
并且cumprod
在适当的情况下通过使用某些推力原语在GPU上显着加快。LSTMCell
并且GRUCell
现在在GPU上通过融合内核显着更快CuDNN
的默认算法已经更改,PRECOMP_GEMM
这是一个 更快的算法,需要一小部分工作空间。以前,它曾经 是IMPLICIT_GEMM
零工作空间,但是显着较慢。- 通过将批次直接整理到共享内存中,数据加载器的5%至10%的改进。
- 现在,SVD通过分频(
sgesdd
)在GPU上进行计算,可以提供2x至5x的加速。 - 常用的功能
expand
已被移至C,以便在较小型号中具有更好的性能。
Bug修复
- 对大范围的THNN功能增加了对重量和偏差的连续检查
random_
当指定下限和上限时,使范围正确parallel_apply
现在可以拿出不可争议的论据grad
在Dot
功能中正确重塑(输入不必是1D矢量...)- 添加
Variable.type_as
- 统一参数名称
norm
和renorm
拥有p=norm_type
,dim=dim
btrisolve
工作在CPU双打- 通过实现固定的
torch.nn.Module
的ipython autocomplete __dir__
device_ids
现在可以None再次F.data_parallel
使用所有可用的GPUBatchNorm(<5.1.10)
和Dilation(6.0.20)
中的解决方法cudnn
错误- 在
Conv1d CPU
中填补错误修复 remainder
并且cremainder
对于整数类型是固定的- 固定存储器泄漏
btrisolve
和getri
- 如果由于任何异常,
nn.Module
的源不能被检索,则将 序列化处理为非致命的 collate_fn
现在保留numpy
数组的类型is_tensor
而is_storage
现在是固定的旧式Python类torch.cat
现在支持关键字参数- CUDA集体支持的合并,但输入都被假定为相同的Tensor类型。这是固定的
- 修复
autograd
中的死锁错误,因为在特定的,linux发行版(特别是ArchLinux
)中有一个基本的glibc
错误 abs
现在固定为char
和shortcuda
类型torch.diag
在给出维度参数时修正自动格式- 在CPU上修复分组卷积
bias=False
- 揭露
dilated
卷积ConvTranspose*d
- 修正了一个错误的
HingeEmbeddingLoss
地方margin
现在可以通过kwargs
指定
改进的错误消息
- 当没有CUDA设备可用时修复错误和消息。
下载
在这里,我整理发布了Pytorch中文文档,方便大家查询使用,同时也准备了中文论坛,欢迎大家学习交流!
Pytorch中文文档已经发布,完美翻译,更加方便大家浏览:
Torch中文网:https://ptorch.com/
Pytorch中文网:https://ptorch.com/
Pytorch中文文档:https://ptorch.com/docs/1/