一文解读Tensor到底是个啥玩意儿?(附代码)

2018 年 6 月 13 日 数据派THU

作者:Matthew Mayo, KDnuggets.

翻译:和中华

校对:丁楠雅

本文约1000字,建议阅读5分钟。

本文介绍了各种数值型数据的容器(标量、向量、矩阵、张量)之间的关系,在实践中,张量特指3维及更高维度的数据容器。


尽管理论上和实践中的张量(tensors)有一些细微差别,我们仍然能给出这样的定义:一个张量就是一个可以容纳N维数据及其线性操作的容器。

 

机器学习中的数据通常需要处理为数值型的。特别地,当我们特指神经网络中的数据表示时,通常会提到所谓的张量。一个张量就是一个可以容纳N维数据的容器。很多时候,人们会把它和matrix错误地混用(matrix特指2维的张量),张量是matrix在N维空间的一般形式。

 

数学上讲,张量不仅仅是一个数据容器,除了保存数值型数据,它也包括张量之间合法的线性变换。这种变换的例子如:叉积(cross product)和点积(dot product)。从计算机科学的角度看,把张量理解成面向对象中的对象而不是简单的一个数据结构会更有帮助。

 

(译者注:因为作者提到张量不仅包含数据,而且包含相应的操作,这与我们在面向对象编程中的约定是一致的,所以作者更建议理解成是对象。)

 

虽然上面的描述都是正确的,但理论上和机器学习实践中所指的张量还是会有细微差别。我们暂时简单地将他们视为数据结构,下图概括了张量和标量、向量跟矩阵的关系,以及如何用Numpy创建各种数据类型的代码。在随后的帖子中我们还会看看张量的变换。

 

 

 标量


单个数字就是一个标量。标量是一个0维的张量。因此,它具有0个轴,并且秩为0。

 

这就是细微差别出现的地方,尽管单个数字可以表示为张量,但并不是说它就应该是张量或者通常是张量。我们有足够的理由把数字视为张量(讨论张量的操作时会看到),但作为一种存储机制,这种表示会让人困惑。

 

下面的代码中,Numpy的多维数组ndarray被用来创建刚才讨论的示例结构。回忆一下,多维数组的ndim属性返回数组的维数。

import numpy as np

 

x = np.array(42)

print(x)

print('A scalar is of rank %d' %(x.ndim))

 

 

42

A scalar is of rank 0

 

向量


向量是1维的张量,在计算机科学中经常把它叫做数组。向量由一串数字组成,具有1个轴,并且秩为1。

x = np.array([1, 1, 2, 3, 5, 8])

print(x)

print('A vector is of rank %d' %(x.ndim))

 

 

[1 1 2 3 5 8]

A vector is of rank 1


矩阵


矩阵是秩为2的张量,即它有两个轴。在各种场景你都能熟悉这个概念,尤其是把数据喂给你的scikit-learn机器学习模型时。矩阵就是把数字放入网格内(想象行和列),是一个2维的张量。

x = np.array([[1, 4, 7],

              [2, 5, 8],

              [3, 6, 9]])

print(x)

print('A matrix is of rank %d' %(x.ndim))

 

 

[[1 4 7]

 [2 5 8]

 [3 6 9]]

A matrix is of rank 2


三维张量(及更高的维度)


严格来说,上述结构都是合法的张量。通常谈到张量时,都是将矩阵的概念推广到N>=3维。为了避免混淆,我们通常只把3维或更高维度的张量称为张量(通常而言,把标量‘42’称为张量没什么好处,只会让人困惑)。

x = np.array([[[1, 4, 7],

               [2, 5, 8],

               [3, 6, 9]],

              [[10, 40, 70],

               [20, 50, 80],

               [30, 60, 90]],

              [[100, 400, 700],

               [200, 500, 800],

               [300, 600, 900]]])

print(x)

print('This tensor is of rank %d' %(x.ndim))

 

 

[[[  1   4   7]

  [  2   5   8]

  [  3   6   9]]

 [[ 10  40  70]

  [ 20  50  80]

  [ 30  60  90]]

 [[100 400 700]

  [200 500 800]

  [300 600 900]]]

This tensor is of rank 3


怎么用张量是你自己的事情。尽管如此,理解什么是张量以及它跟数字容器结构的关系现在应该很清楚了。


原文标题:WTF is a Tensor?!?

标签:  numpy, Python, Tensor

原文链接:https://www.kdnuggets.com/2018/05/wtf-tensor.html

译者简介

和中华,留德软件工程硕士。由于对机器学习感兴趣,硕士论文选择了利用遗传算法思想改进传统kmeans。目前在杭州进行大数据相关实践。加入数据派THU希望为IT同行们尽自己一份绵薄之力,也希望结交许多志趣相投的小伙伴。

翻译组招募信息

工作内容:将选取好的外文前沿文章准确地翻译成流畅的中文。如果你是数据科学/统计学/计算机专业的留学生,或在海外从事相关工作,或对自己外语水平有信心的朋友,数据派翻译组欢迎你们加入!

你能得到:提高对于数据科学前沿的认知,提高对外文新闻来源渠道的认知,海外的朋友可以和国内技术应用发展保持联系,数据派团队产学研的背景为志愿者带来好的发展机遇。

其他福利:和来自于名企的数据科学工作者,北大清华以及海外等名校学生共同合作、交流。

点击文末“阅读原文”加入数据派团队~

转载须知

如需转载,请在开篇显著位置注明作者和出处(转自:数据派THU ID:DatapiTHU),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。

发布后请将链接反馈至联系邮箱(见下方)。未经许可的转载以及改编者,我们将依法追究其法律责任。


点击“阅读原文”拥抱组织


登录查看更多
3

相关内容

还在修改博士论文?这份《博士论文写作技巧》为你指南
最新《自动微分手册》77页pdf
专知会员服务
100+阅读 · 2020年6月6日
【图神经网络(GNN)结构化数据分析】
专知会员服务
115+阅读 · 2020年3月22日
《深度学习》圣经花书的数学推导、原理与Python代码实现
Transformer文本分类代码
专知会员服务
116+阅读 · 2020年2月3日
49篇ICLR2020高分「图机器学习GML」接受论文及代码
专知会员服务
61+阅读 · 2020年1月18日
【新书】Python编程基础,669页pdf
专知会员服务
193+阅读 · 2019年10月10日
一文读懂自注意力机制:8大步骤图解+代码
新智元
153+阅读 · 2019年11月26日
图解NumPy,这是理解数组最形象的一份教程了
机器之心
6+阅读 · 2019年7月12日
100行Python代码,轻松搞定神经网络
大数据文摘
4+阅读 · 2019年5月2日
图卷积网络到底怎么做,这是一份极简的Numpy实现
从张量到自动微分:PyTorch入门教程
论智
9+阅读 · 2018年10月10日
一文读懂PyTorch张量基础(附代码)
数据派THU
6+阅读 · 2018年6月12日
深度学习线性代数简明教程
论智
11+阅读 · 2018年5月30日
PyTorch 到底好用在哪里?
AI研习社
3+阅读 · 2017年10月27日
手把手教TensorFlow(附代码)
深度学习世界
15+阅读 · 2017年10月17日
Arxiv
3+阅读 · 2018年8月27日
Arxiv
5+阅读 · 2018年1月30日
Arxiv
3+阅读 · 2017年12月18日
Arxiv
5+阅读 · 2017年4月12日
VIP会员
相关VIP内容
还在修改博士论文?这份《博士论文写作技巧》为你指南
最新《自动微分手册》77页pdf
专知会员服务
100+阅读 · 2020年6月6日
【图神经网络(GNN)结构化数据分析】
专知会员服务
115+阅读 · 2020年3月22日
《深度学习》圣经花书的数学推导、原理与Python代码实现
Transformer文本分类代码
专知会员服务
116+阅读 · 2020年2月3日
49篇ICLR2020高分「图机器学习GML」接受论文及代码
专知会员服务
61+阅读 · 2020年1月18日
【新书】Python编程基础,669页pdf
专知会员服务
193+阅读 · 2019年10月10日
相关资讯
一文读懂自注意力机制:8大步骤图解+代码
新智元
153+阅读 · 2019年11月26日
图解NumPy,这是理解数组最形象的一份教程了
机器之心
6+阅读 · 2019年7月12日
100行Python代码,轻松搞定神经网络
大数据文摘
4+阅读 · 2019年5月2日
图卷积网络到底怎么做,这是一份极简的Numpy实现
从张量到自动微分:PyTorch入门教程
论智
9+阅读 · 2018年10月10日
一文读懂PyTorch张量基础(附代码)
数据派THU
6+阅读 · 2018年6月12日
深度学习线性代数简明教程
论智
11+阅读 · 2018年5月30日
PyTorch 到底好用在哪里?
AI研习社
3+阅读 · 2017年10月27日
手把手教TensorFlow(附代码)
深度学习世界
15+阅读 · 2017年10月17日
Top
微信扫码咨询专知VIP会员