初识神经网络——张量
recovxy 老大哥

1.1 张量(tensor)

在神经网络中,一堆存储在多维Numpy数组中的数据,就可称之为张量。它的核心概念在于,它是一个数据容器。它包含的数据几乎总是数值数据,因此它是数字的容器。

例如,我们熟悉的矩阵,它是二维张量。张量是矩阵向任意维度的推广 [注意,张量的维度(dimension)通常叫做(axis)]。

1.2 标量(0D张量)

仅包含一个数字的张量叫做标量(scalar,也叫标量张量、零维张量、0D张量)。在Numpy中,一个float32或float64的数字就是一个标量张量(或标量数组)。可以使用ndim属性来查看一个Numpy张量的轴的个数。标量张量有0个轴(ndim == 0)。张量轴的个数也叫(rank)。下面是一个是Numpy标量。

1
2
3
4
5
6
>>> import numpy as np
>>> x = np.array(26)
>>> x
array(26)
>>> x.ndim
0

1.3 向量(1D张量)

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

1
2
3
4
5
>>> x = np.array([21, 2, 10, 254, 1])
>>> x
array([21, 2, 10, 254, 1])
>>> x.ndim
1

这是 一个有 5个元素的向量,所以被称为5D向量。不要把5D张量5D向量弄混!5D向量只有一个轴,沿着轴有5个维度,而5D张量有5个轴(沿着每个轴可能有任意个维度)。维度可以表示沿着某个轴上的元素个数(比如5D向量),也可以表示张量中轴的个数(比如5D张量)。如果感到混乱,对于后面一种情况,更准确的说法是5阶张量(张量的阶数即轴的个数),但5D张量这种模糊的写法更常见。

1.4 矩阵(2D张量)

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

1
2
3
4
5
>>> x = np.array([[34, 8, 95, 10, 3],
[68, 46, 96, 83, 53],
[96, 75, 326, 97, 7]])
>>> x.ndim
2

1.5 3D张量与更高维张量

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

1
2
3
4
5
6
7
8
9
10
11
>>> x = np.array([[[21, 4, 54, 21],
[86, 77, 0, 31],
[90, 9, 51, 74]],
[[10, 65, 9, 65],
[30, 63, 51, 34],
[46, 26, 96, 66]],
[[85, 82, 29, 0],
[78, 49, 48, 59],
[84, 89, 54, 47]]])
>>> x.ndim
3

1.6 关键属性

张量是由以下三个关键属性来定义的。

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

  • 形状。这是一个整数元组。表示张量沿着每个轴的维度大小(元素个数)。例如,矩阵的形状(a, b),3D张量的形状为(a, b, c)。向量的形状只包含一个元素,比如前面1.3中的例子形状为(5,),而标量的形状为空,即()。

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

  • 本文标题:初识神经网络——张量
  • 本文作者:recovxy
  • 创建时间:2020-12-11 10:51:36
  • 本文链接:https://naiv.xyz/2020/12/11/2020-12-11-First acquaintance with neural networks--tensors/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
 评论