深度学习中最基本的操作单元——张量

今天我们来谈一下,深度学习中最基本的数据操作单元——张量
张量是一个数字容器,同时也是定义张量转换来生成新张量的一组规则,如果对这个概念还是感觉到比较难理解的同学,我们可以将张量想象成多维数组。每个张量有一个秩或者阶(rank),这对应它的维度空间。一个简单标量(如1)可以表示为秩为0的张量,向量秩为1,一个nxn的矩阵秩为2,以此类推。
张量操作
如果查看PyTorch文档(https://oreil.ly/1Ev0-),会看到大量可以在张量上应用的函数,从查找最大元素到应用傅里叶变换一应俱全。一般来说,我们在运行深度学习算法时,我们要将图像、文本和音频转换为张量,并通过处理这些张量来完成我们最终要实现的目的。
同时,我们在运行深度学习算法时,会经常用到一些函数,这里我们对常用的一些函数进行简单介绍。
最大索引
首先,我们往往需要找出一个张量中的最大元素,以及包含这个最大值的索引(因为这通常对应神经网络在最后的预测中确定的类)。这些可以用max()和argmax()函数来得到。还可以使用item()从一个1维张量提取一个标准Python值。

torch.rand(2,2).max
>tensor(0.4726)
torch.rand(2,2).max.item()
>0.86499

数据类型转换
有时,我们可能想要改变一个张量的类型,例如,从一个LongTensor改为FloatTensor。这可以用to()做到:

float_tensor=torch.to(LongTensor)

张量维度变换
另一个常见的操作是张量变形(reshaping)。通常来说,由于神经网络层需要输入形状与你目前提供输入的形状稍有不同,可能就会出现张量变形。对于此,我们可以用view()或reshape()来完成变形。

flat_tensor=torch.rand(784)
view_tensor=flat_tensor.view(1,28,28)

需要注意的是,变形后张量总的元素个数必须与原张量元素个数相同。
现在来讲一讲view()和reshape()函数的区别
view()会处理为原张量的一个视图,所以如果底层数据发生变化,视图也会改变(反之亦然)。不过如果所需的视图不是连续的,view()会抛出错误。也就是说,如果从头开始创建所需形状的一个新张量,不会共享占用的同一个内存块。如果发生这种情况,使用view()之前必须调用tensor.contiguous()。不过reshape()后会在后台完成所有的这些工作,所以,一般来讲,我们用的最多的是reshape()而不是view().
张量重排
最后我们需要重排一个张量的维度。可能对图像会有这个需求,图像通常存储为[height,width,channel]张量,不过PyTorch更喜欢按照[channel,height,width]来处理。我们可以使用permute()用一种相当简单的方式来完成重排。
张量中的广播机制
广播(broadcasting)是从NumPy借鉴来的,允许在一个张量和一个较小张量之间完成操作。如果反向从其后缘维度(trailing dimensions,即末尾的维度)开始,若满足以下条件,就可以在这两个张量上广播:
1.两个维度大小相等
2.其中一个维度大小为1

此外,再分享一下几个常用的链接
Jupyter项目文档:https://jupyter.org/documentation
PyTorch文档:https://pytorch.org/docs/stable
AWS深度学习AMI:https://oreil.ly/G9Ldx
:文章摘选自《基于PyTorch的深度学习》Ian Pointer著

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

毛毛真nice

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值