当前位置:   article > 正文

张量是什么

张量

分类

0阶张量:标量
1阶张量:一维数组=向量
2阶张量:二维数组=矩阵
3阶张量:张量=多维数组

标量

仅包含一个数字的张量叫作标量(scalar,也叫标量张量、零维张量、0D(阶)张量)。在Numpy中,一个float32或float64的数字就是一个标量张量(或标量数组)。一般深度学习更偏向于使用float32,运算速度较快。

可以用ndim属性来查看一个Numpy张量的轴的个数。标量张量有0个轴(ndim=0)。张量轴的个数也叫作阶(rank)。下面是一个Numpy标量。

import numpy as np
x = np.array(12)
print(x)  # 12
x.ndim  # 0
  • 1
  • 2
  • 3
  • 4

向量(1阶张量)

数字组成的数组叫作向量(vector)或一阶张量(1D张量)。一维张量只有一个轴。下面是一个 Numpy向量。

x = np.array([12, 3, 6, 14, 7])
print(x)  # [12  3  6 14  7]
x.ndim  # 1
  • 1
  • 2
  • 3

这个向量有5个元素,所以被称为5D向量。

不要把 5D 向量和 5D 张量弄混!

5D 向量(5维向量)只有一个轴,沿着轴有 5 个维度,而 5D 张量(五维张量)有 5 个轴(沿着每个轴可能有任意个维度)。

维度(dimensionality)既可以表示沿着某个轴上的元素个数(比如 5D 向量),也可以表示张量中轴的个数(比如5阶张量)。有时5D张量这种模糊的写法更常见。

向量的几何表示

二维向量[1,2],只有一个轴,因为可以分解到平面直角坐标系的x,y轴中,所以是二维;以此类推,n维向量也只有一个轴,因为可以分解到n个方向,所以称为n维

image-20210922101620859

矩阵 2阶张量

向量组成的数组叫作矩阵(matrix)或二阶张量(2D 张量)。矩阵有 2个轴(通常叫作行和列)。你可以将矩阵直观地理解为数字组成的矩形网格。下面是一个 Numpy 矩阵。

x = np.array([[5, 78, 2, 34, 0], [6, 79, 3, 35, 1], [7, 80, 4, 36, 2]])
x.ndim  # 2
  • 1
  • 2

第一个轴上的元素叫作行(row),第二个轴上的元素叫作列(column)。在上面的例子中,[5, 78, 2, 34, 0] 是 x 的第一行,[5, 6, 7] 是第一列。

3阶张量与更高维张量

将多个矩阵组合成一个新的数组,可以得到一个3阶张量,你可以将其直观地理解为数字组成的立方体。下面是一个Numpy的3阶张量。

x = np.array([[[5, 78, 2, 34, 0], [6, 79, 3, 35, 1], [7, 80, 4, 36, 2]], [[5, 78, 2, 34, 0], [6, 79, 3, 35, 1], [7, 80, 4, 36, 2]], [[5, 78, 2, 34, 0], [6, 79, 3, 35, 1], [7, 80, 4, 36, 2]]])
x.ndim  # 3
  • 1
  • 2

将多个3阶张量组合成一个数组,可以创建一个4阶张量,以此类推。深度学习处理的一般是0阶到4阶的张量,但处理视频数据时可能会遇到5阶张量。

张量的三个关键属性

轴的个数(阶)

例如,3阶张量有3个轴,2阶张量(矩阵)有2个轴。这在 Numpy 等 Python 库中也叫张量的 ndim

形状

这是一个整数元组,表示张量沿每个轴的维度大小(元素个数)。

例如,前面矩阵示例的形状为 (3, 5),3D 张量示例的形状为 (3, 3, 5)。向量的形状只包含一个元素,比如 (5,),而标量的形状为空,即 ()。

数据类型

(在 Python 库中通常叫作 dtype)。这是张量中所包含数据的类型,例如,张量的类型可以是 float32、uint8、float64 等。在极少数情况下是字符(char)张量。注意,Numpy(以及大多数其他库)中不存在字符串张量,因为张量存储在预先分配的连续内存段中,而字符串的长度是可变的,无法用这种方式存储。

思考

x = torch.tensor([[1, 2, 8, 9], [1, 2, 8, 9]])
y = torch.tensor([[5, 8, 8, 3],[5, 8, 8, 3]])

print(torch.cat((x, y), dim=0))  # 按行(轴1)相加
print(torch.cat((x, y), dim=1))  # 按列(轴2)相加

# ==================================

x = torch.tensor([1, 2, 8, 9])
y = torch.tensor([5, 8, 8, 3])
print(torch.cat((x, y), dim=0))  # 按行(轴1)相加
print(torch.cat((x, y), dim=1))  # 按列(轴2)相加
# x,y都只有一个轴,所以dim=1报错
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

tensor张量(数学概念)和array数组(计算机概念)

从色彩角度理解张量

对于彩色图像,我们用(R, G, B)三个数字来表示一个颜色,也就是用红、绿、蓝三种基本颜色进行叠加。

image.jpeg

一张彩色图像可以用一个个由整数组成的立方体阵列的像素点来表示,这种按立方体排列的数字阵列称为三阶张量(tensor),这三阶张量的长度和宽度即为图像的分辨率,高度为三。三阶张量的高度也称为通道(channel)数,因此我们也说彩色图形有三个通道。矩阵可看作是高度为1的三阶张量,而由三个一阶张量叠加就成了三阶张量

关于张量的其他理解:

张量、矩阵和向量区别_shenggedeqiang的博客-CSDN博客_张量和向量的区别

通俗易懂说“张量”_DenisXu的博客-CSDN博客_三阶张量

什么是张量 (tensor)?_kanghe-CSDN博客_tensor是什么意思

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/1005331
推荐阅读
相关标签
  

闽ICP备14008679号