赞
踩
作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing
本文网址:https://blog.csdn.net/HiWangWenBing/article/details/119358616
目录
张量(tensor)是多维数组,是向量、矩阵推向更高的维度的一种统一的、抽象的概念。
(1)张量的维度/阶度/维数
n维/阶向量:1维张量,在该维度包含n个分量,这就是n维向量,n为向量是1维的张量。
1维/阶张量:有一个维度方向,一个方向包含L个元素。L称为长度。
2维/阶张量:有2个维度方向,一个维度方向包含n个元素,一个维度包含m个元素,一个包含n*m个元素组成。n,m都是长度,或者说一维向量的维度。
3维/阶张量:有3个维度方向,一共有x*y*z个元素组成。每个维度方向,都是一个完整的数据集。
因此,在Python中,张量就是Python Numpy中的多维数组。
(2)张量的维度方向标识
为了区分N个维度/阶段张量的不同维度方向,引入了dim或axis的概念。
不同的维度的张量,dim=0的位置不是固定的。
但有一个规则确实确定的:
张量的维度、阶数:这两个概念是等价的,都是只张量的维度方向的个数。
(1)0维/0阶张量:
- tensor([1.])
- torch.Size([1])
(2)一维/一阶张量:
- tensor([1.])
- torch.Size([1])
- tensor([[1., 1.]])
- torch.Size([1, 2])
- tensor([[1., 1., 1., 1., 1.]])
- torch.Size([1, 5])
- tensor([[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]])
- torch.Size([1, 10])
(3)二维/二阶张量
- tensor([[1.]])
- torch.Size([1, 1])
- tensor([[1., 1.],
- [1., 1.]])
- torch.Size([2, 2])
- tensor([[1., 1., 1., 1., 1.],
- [1., 1., 1., 1., 1.],
- [1., 1., 1., 1., 1.],
- [1., 1., 1., 1., 1.],
- [1., 1., 1., 1., 1.]])
- torch.Size([5, 5])
- tensor([[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
- [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
- [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
- [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
- [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
- [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
- [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
- [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
- [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
- [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]])
- torch.Size([10, 10])
- tensor([[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
- [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]])
- torch.Size([2, 10])
- tensor([[1., 1.],
- [1., 1.],
- [1., 1.],
- [1., 1.],
- [1., 1.],
- [1., 1.],
- [1., 1.],
- [1., 1.],
- [1., 1.],
- [1., 1.]])
- torch.Size([10, 2])
(3)三维、三阶张量
- tensor([[[1.]]])
- torch.Size([1, 1, 1])
- tensor([[[1., 1.],
- [1., 1.]],
-
- [[1., 1.],
- [1., 1.]]])
- torch.Size([2, 2, 2])
tensor([[[1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.]], [[1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.]], [[1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.]], [[1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.]], [[1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.]]]) torch.Size([5, 5, 5])
- tensor([[[1., 1., 1.],
- [1., 1., 1.]]])
- torch.Size([1, 2, 3])
- tensor([[[1., 1., 1.]],
-
- [[1., 1., 1.]]])
- torch.Size([2, 1, 3])
- tensor([[[1.],
- [1.]],
-
- [[1.],
- [1.]],
-
- [[1.],
- [1.]]])
- torch.Size([3, 2, 1])
维度/阶数不变,形状可以变化。
在深度学习领域,用张量这样一个新的概念,替代Python Numpy中的0维张量(标量)、一维的向量,二维的矩阵,高维的数组。
在深度学习框架中,所有待进行数学运算的数据,都是以张量的形态存储、存在。
任何维度的数据,如果不是张量形态的数据,需要首先转换成张量的形态。
这是因为,在深度学习领域,输入的数据、深度学习处理的数据、输出数据,它们的维度为弹性的,并非确切的,因此需要一种弹性的数据来描述各种类型的数据,张量应运而生。
如果说向量是一种有m个特征的一维的数据结构,如身高、体重、地区、性别,
那么张量把这些特征,进行分组,每一个组称为一个维度,构成了一个多维特征的数据结构,这个数据结构就称为张量,因此张量是组织众多特征的一种数据结构!!!
上述定义的excel表格与张量有这本质的区别:
excel表格的“列”是特征,上述表格中,特征是以一维向量的形式组织的。
excel表格的行是数据,每一行就是一个满足上述特征的数据实例,一个实例就是一个数据样本,行数可以无限多,样本可以无限多。
如果把上述表格中的特征,进行分组,便可构成二维、三维、高维的特征值,这便是张量!
张量是管理任意维度“特征”的一种数据结构。
张量的算术运算,就是多维数组的数学运算。
[Python系列-12]:人工智能 - 数学基础 -2- 数组元素的算术运算
https://blog.csdn.net/HiWangWenBing/article/details/119298635
备注:
0维度方向:是指沿着行扩展的方向,增加或扩展行数的方式来合并。
1维度方向:是指沿着列扩展的方向,增加或扩展列数的方式来合并。
张量的点积就是多维数组的点积:
[Python系列-15]:人工智能 - 数学基础 -5- 向量内积(点乘)和外积(叉乘)概念及几何意义
https://blog.csdn.net/HiWangWenBing/article/details/119322764
作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing
本文网址:https://blog.csdn.net/HiWangWenBing/article/details/119358616
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。