神经网络的数据表示
神经网络中使用的数据很多存储在多维Numpy数组中,也叫张量(tensor)。一般来说,当前所有机器学习系统都使用张量作为基本数据结构。张量对这个领域非常重要,重要到Google的TensorFlow都以它来命名。那么什么是张量?
张量这一概念的核心在于,它是一个数据容器。它包含的数据几乎总是数值数据,因此它是数字的容器。我们可能对矩阵很熟悉,它是二维张量。张量是矩阵向任意维度的推广(注意,张量的维度(dimension)通常叫作轴(axis))。
1. 标量(0D张量)
仅包含一个数字的张量叫作标量(scalar,也叫作标量张量、零维张量、0D张量)。在Numpy中,一个float32或float64的数字就是一个标量张量(或标量数组)。你可以用ndim属性来查看一个Numpy张量的轴的个数。标量张量有0个轴(ndim=0)。张量轴的个数也叫作阶(rank)。下面是一个Numpy标量。
>>> import numpy as np
>>> x = np.array(12)
>>> x
array(12)
>>> x.ndim
0
2. 向量(1D张量)
数字组成的数组叫作向量(vector)或一维张量(1D张量)。一维张量只有一个轴。下面是一个Numpy向量。
>>> x = np.array([12,3,6,14,7])
>>> x
array([12,3,6,14,7])
>>> x.ndim
1
这个向量有5个元素,所以被称为5D向量。不要把5D向量和5D张量弄混!5D向量只有一个轴,沿着轴有5个维度,而5D张量有5个轴(沿着每个轴可能有任意个维度)。维度(dimensionality)可以表示沿着轴上的元素个数(比如5D向量),也可以表示张量中轴的个数(比如5D张量),这有时会令人感到混乱。对于后一种情况,技术上更准确的说法是5阶张量(张量的阶数即轴的个数),但5D张量这种模糊的写法更常见。
3. 矩阵(2D张量)
向量组成的数组叫作矩阵(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
第一个轴上的元素叫作行(row),第二个轴上的元素叫作列(column)。在上面的例子中,[5,78,2,34,0]是x的第一