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

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

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

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

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

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

1a3bd25a1bf5c6aa0bbd5dc30088fe82de9d2253

标量

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

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

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

原文链接

猜你喜欢

转载自blog.csdn.net/weixin_40581617/article/details/80705020