量产工具sk6211bb教程-()
来源:191路由网 2022-12-15 21:12:56
翻译 | 林椿眄
出品 | AI 科技大本营(微信官方账号ID:rgznai100)
本版主要更新一些性能优化,包括权衡内存计算和提供 Windows 支持,24个基本分布,变量和数据类型,零维张量,张量变量合并,支持 CuDNN 7.1.加快分布式计算,修复重要部件 bug等。
▌目录
主要变化
张量/变量合并
零维张量
数据类型
版本迁移指南
新特性
张量
高级索引功能
傅里叶快速变换
神经网络
权衡内存计算
瓶颈-识别代码热点的工具
torch中的分布
24个基础的概率分布
添加 cdf,variance,entropy,perplexity 等方法
分布式计算
便捷使用的Launcher utility
NCCL2 后端
C 拓展
Window 支持
改善 ONNX 性能
RNN 支持
性能改善
Bug 修复
▌主要变化
我们将在下面这样做Pytorch最重要的核心功能是用户总结的。
主要变化和潜在突破性变化
Tensors/Variables 合并
零维 Tensors 的一些操作
弃用Volatile 标志
性能改善
添加了 dtypes、devices及numpy风格的 tensor 创建函数
支持编写一些不依赖设备的代码
我们写了一个版本的迁移指南,帮助您将代码转换为新版本 APIs和风格。如果你想迁移以前的版本 PyTorch请阅读迁移指南,代码。如果你想迁移以前的版本 PyTorch代码,请阅读迁移指南。此外,迁移指南中还包括本部分(包括主要核心变化)。
Tensor 和Variable 类合并
新版本中,torch.autograd.Variable和torch.Tensor同属一类。更准确地说,torch.Tensor 能跟踪历史,像旧版本一样跟踪历史 Variable 那样运行; Variable 包装仍然可以像以前一样工作,但返回的对象类型是 torch.Tensor。 这意味着您不再需要代码中的所有变量包装器。
Tensor 的type () 变化
这里需要注意的是张量 type()不再反映数据类型,而是改用 isinstance()或 x.type()表示数据类型,代码如下:
>>> x = torch.DoubleTensor([1, 1, 1])>>> print(type(x)) # was torch.DoubleTensor<class 'torch.autograd.variable.Variable'>>>> print(x.type()) # OK: 'torch.DoubleTensor''torch.DoubleTensor'>>> print(isinstance(x, torch.DoubleTensor)) # OK: TrueTrue
autograd 跟踪历史记录
作为 autograd方法的核心标志,requires_grad现在是 Tensors 类的属性。 让我们看看这个变化是如何反映在代码中的。 让我们看看这个变化是如何反映在代码中的。Autograd以前用过的使用方法和方法 Variable 同样的规则。任意输入操作 Tensor的require_grad = True它开始跟踪历史记录。代码如下所示,
>>> x = torch.ones(1) # create a tensor with requires_grad=False (default)>>> x.requires_gradFalse>>> y = torch.ones(1) # another tensor with requires_grad=False>>> z = x y>>> # both inputs have requires_grad=False. so does the output>>> z.requires_gradFalse>>> # then autograd won't track this computation. let's verify!>>> z.backward()RuntimeError: element 0 of tensors does not require grad and does not have a grad_fn>>>>>> # now create a tensor with requires_grad=True>>> w = torch.ones(1, requires_grad=True)>>> w.requires_gradTrue>>> # add to the previous result that has require_grad=False>>> total = w z>>> # the total sum now requires grad!>>> total.requires_gradTrue>>> # autograd can compute the gradients as well>>> total.backward()>>> w.gradtensor([ 1.])>>> # and no computation is wasted to compute gradients for x, y and z, which don't require grad>>> z.grad == x.grad == y.grad == NoneTrue
requires_grad 操作
除直接设置属性外,你也可以用 my_tensor.requires_grad_(requires_grad = True)在原地更改此标志,或者如上所示,在创建时将其作为参数传递(默认为 False)来实现,代码如下:
>>> 电脑 existing_tensor.requires_grad_()>>> existing_tensor.requires_gradTrue>>> my_tensor = torch.zeros(3, 4, requires_grad=True)>>> my_tensor.requires_gradTrue
关于 .data
.data 是从 Variable中获取底层 Tensor 主要方法。 合并后,调用 y = x.data语义仍然相似。 合并后,调用 y = x.data它仍然有相似的语义。 y将是一个与 x共享相同的数据 Tensor,并且 requires_grad = False,它与 x计算历史无关。
但是,在某些情况下 .data 可能不安全。 对 x.data 不会有任何变化 autograd 在反向过程中需要跟踪 x,计算出的梯度将不正确。另一种更安全的方法是使用它 x.detach(),它将返回一个和 requires_grad = False 共享数据 Tensor,但如果需要在反向过程中 x,那么 autograd 将当场更改。
零维张量的一些操作
在之前的版本中,Tensor矢量(1维张量)索引将返回一个索引Python但是一个数字Variable矢量索引将返回一个大小为(1,)的矢量。同样地, reduce函数具有类似的操作,即函数具有类似的操作,即函数具有类似的操作tensor.sum()会回一个Python数字,但是variable.sum()调用大小为(1,)的向量。
幸运的是,新版本PyTorch引入适当的标量(0维张量)支持! 可使用新版本torch.tensor函数创建标量(这将在后面更详细地解释,现在只需要认为是PyTorch中numpy.array等效项)。现在你可以做这样的事,代码如下:
>>> torch.tensor(3.1416) 电脑 # create a scalar directlytensor(3.1416)>>> torch.tensor(3.1416).size() # scalar is 0-dimensionaltorch.Size([])>>> torch.tensor([3]).size() # compare to a vector of size 1torch.Size([1])>>>>>> vector = torch.arange(2, 6) # this is a vector>>> vectortensor([ 2., 3., 4., 5.])>>> vector.size()torch.Size([4])>>> vector[3]# indexing into a vector gives a scalartensor(5.)>>> vector[3].item() # .item() gives the value as a Python number5.0>>> sum = torch.tensor([2, 3]).sum()>>> sumtensor(5)>>> sum.size()torch.Size([])
累计损失函数
考虑在 PyTorch0.4.0 以前广泛使用的版本 total_loss = loss.data[0]模式。Loss 它包含张量(1,)Variable,但是新发布的0.4.0版本中,loss 是0维标量。Loss 它包含张量(1,)Variable,但是新发布的0.4.0版本中,loss 是0维标量。 标量索引毫无意义(当前版本会给出警告,但在0.5.0中会报错一个硬错误:使用) loss.item()从标量中获取 Python 数字。
值得注意的是,如果你不能在累积损失时将其转换为电脑 Python 数字可能会增加程序中的内存使用量。这是因为上面表达式的右侧是以前版本中的一个Python 浮点数,现在是零维张量。 因此,总损失将积累张量及其历史梯度,自动解决梯度值可能需要更多的时间。
弃用volatile标志
新版本中,volatile 标志将被废弃,不再工作。在之前的版本中,任何涉及的版本 volatile = True 的 Variable 没有理由计算 autograd 追踪到。它已被一组更灵活的上下文管理器所取代,包括 torch.no_grad(),torch.set_grad_enabled(grad_mode)等等。代码如下:
{ x}电脑
相关阅读
-
-
量产工具sk6211bb教程-()
量产工具sk6211bb教程()翻译|林椿眄出品|AI科技大本营(微信官方账号ID:rgznai100)本版主要更新一些性能优化,包括权衡内存计算和提供Windows支持,24个基本分布,变量和数据类型,零维张量,张量变量合并,支持CuDNN7.1.加快分布式计算,修复重要部件bug等。▌目录主要变化张量/变量合并零维张量数据类型版本迁移指南新特性张量高级索引功能傅里...
2022-12-15
-
-
大白菜超级u盘启动增强版-(大白菜超级U盘启动盘制作)
大白菜超级u盘启动增强版(大白菜超级U盘启动盘制作)介绍最基本的系统安装,通过U盘安装操作系统是一种非常实用和简单的方式,然后介绍U盘安装Windows操作系统的版本。1.用大白菜超级U盘启动制作工具制作安装盘(其他工具也可以,以大白菜启动工具为例)1.第一步:到大白菜官网下载大白菜超级U盘启动制作工具,地址:2.第二步:找到刚下载的安装包,默认按基本安装软件安装。电脑3.第三步:通...
2022-12-15
-
-
电脑蓝屏怎么修复win7-(电脑蓝屏怎么修复win7系统)
如何修复电脑蓝屏?win7(如何修复电脑蓝屏?win7系统)在使用计算机的过程中,不可避免地电脑会出现各种计算机故障,最常见的是Windows电脑蓝屏出现故障,但蓝屏原因太多,但电脑蓝屏会提供相关的错误代码,通过错误代码解决问题。可能是系统问题、驱动问题或硬件问题。只有找到原因,才能对症下药。那么如何解决电脑蓝屏呢?下面装机之家分享一下Win7...
2022-12-15
-
-
电脑装上硬盘不显示-(电脑不显示硬盘)
电脑安装硬盘不显示(电脑不显示硬盘)昨天电脑卡住了,硬盘没有及时安全弹出。重启电脑后,发现硬盘没有显示在电脑上(电脑是Win10系统),当时只显示系统自带的存储盘,设备管理器中显示硬盘的数据没有迁移。硬盘上的小灯也很亮,插入时...
2022-12-15
-
-
u盘无盘符不识别-(u盘无盘符不识别怎么办)
u盘无盘符不识别(u不识别盘无盘符怎么办?唉,我今天想和你谈谈。Windows10春季创意者更新什么有趣的东西,加上什么坑需要注意和避免,微软跳票的结果,以下省略了小边内心的独白。每一个大版本Windows更新是懒人或电脑清洁电脑的绝佳机会。无论是自动升级还是新安装U盘,垃圾文件都会很多Windows焕然一新。问题来了,U插入电脑,只显示在系统栏上USB设电脑备图标,没有盘符...
2022-12-15
191路由网 - 192.168.1.1,192.168.0.1无线路由器设置教程
版权声明:本站的文章和图片来自互联网收集,仅做分享之用如有侵权请联系站长,我们将在24小时内删除