张量
一个数据容器,包含的数据几乎总是数值数据。张量是矩阵向任意维度的推广。
张量的维度叫作轴。
标量(Scaler,也叫作标量张量、零维张量、0D张量),仅包含一个数字。
标量张量有0个轴(ndim==0),张量轴的个数也叫作阶(rank)。
向量(Vector,一维张量、1D张量),由数字组成的数组。
X = np.array([12, 3, 6, 14, 7])
这个向量有5个元素,所以称为5D向量。不要把5D向量和5D张量混淆,前者只有一个轴,沿着轴有5个维度,而5D张量有5个轴。
维度可以表示沿着某个轴上的元素个数(比如5D向量),也可以表示张量中轴的个数(比如5D张量)。
矩阵(matrix,二维张量、2D张量),由向量组成的数组。
矩阵有2个轴(行和列),第一个轴上的元素叫做行,第二个轴上的元素叫做列。
3D张量,由多个矩阵组成的数组。
将多个3D张量合成数组,创建出4D张量,以此类推。
深度学习处理的一般是0D到4D的张量,但处理视频数据时可能遇到5D张量。
张量由以下三个关键属性定义:
张量切片:选择张量的特定元素。
(1)常见的切片运算
例1:选择第10~100个数字,并将其放在形状为(90,28,28)的数组中。
# shape == (90, 28, 28)
my_slice = train_images[10:100]
my_slice = train_images[10:100, :, :] # 同上,:等同于选择整个轴
my_slice = train_images[10:100, 0:28, 0:28] # 同上
(2)还可以沿着每个张量轴在任意两个索引之间进行选择。
例2:在所有图像的右下角选出14*14像素的区域。
my_slice = train_images[:, 14:, 14:]
(3)也可以使用负数索引,表示与当前轴终点的相对位置。
例3:在图像中心裁剪出14像素*14像素的区域。
my_slice = train_images[:, 7:-7, 7:-7]
通常来说,深度学习中所有数据张量的第一个轴(0轴)都是样本轴(sample axis,也称样本维度)。
此外,深度学习模型不会同时处理整个数据集,而是将数据拆分为小批量,对于这种批量张量,第一个轴叫做批量轴(batch axis, 批量维度)。
对于这种数据集,每个数据点都被编码为一个向量,因此一个数据批量被编码为2D张量,其中第一个轴是样本轴,第二个轴是特征轴。
当时间(或序列顺序)对于数据很重要时,应该将数据存储在带有时间轴的3D向量中。每个样本可以被编码为一个向量序列(2D张量),因此一个数据批量就被编码为一个3D张量。
按照惯例,时间轴始终是第2个轴(索引为1)。
图像通常具有三个维度:高度、宽度和颜色深度。
虽然灰度图像(MNIST数字图像)只有一个颜色通道,因此可以保存在2D张量里。
但按照惯例,图像张量始终都是3D张量。
形如(样本,高度,宽度,颜色通道)–通道在后 TensorFlow使用
或(样本,颜色通道,高度,宽度)–通道在前 Theano使用
Keras框架同时支持以上两种格式。
视频可以看作一系列帧:
relu运算和加法都是逐元素的运算,即该运算独立地应用于张量中的每个元素,它们非常适合大规模并行(向量化)实现。
1. 概念
如果两个形状不同的张量相加,较小的张量会被广播,以匹配较大的张量。
2. 广播的两个步骤
1. 概念
张量点积,也叫张量积,它将输入张量的元素合并在一起,需要和逐元素的乘积区分。
2. 点积概念
1.定义: 改变张量的行和列,得到想要的形状。变形后张量的元素总个数与初始张量相同。
2.例子
以下是每个神经层对输入数据进行的变换
output = relu(dot(W, input) + b)
W和b都是张量,被称为该层的权重或可训练参数,分别对应kernel和bias属性。
一开始,这些权重矩阵取较小的随机值,这一步叫做随机初始化。由于W和b都是随机的,因此output肯定不会得到任何有用的表示,所以下一步是根据反馈信号调节权重,这个过程称为训练。
如何调节网络中的权重系数呢?
- 计算损失相对于网络系数的梯度,向梯度的反方向改变系数,从而降低损失。
2.在神经网络中,目的是使得损失函数f(x)最小化,因此只需要将x沿着导数的反方向移动一小步。
1.梯度是张量运算的导数,它是导数这一概念向多元函数导数的推广。
2.f在W0点的导数是一个张量gradient(f)(W0),其形状和W相同,每个系数gradient(f)(W0)[i, j]表示改变W0[i, j]时loss_value变化的方向和大小。gradient(f)(W0)也可以看作表示f(W)在W0附近曲率的张量。因此,可以通过将W向梯度的反方向移动来减小f(W)。
1.小批量随机梯度下降(mini-batch SGD)
2.小批量SGD的变体
反向传播,从最终损失值开始,从最顶层反向作用至最底层,利用链式法则计算每个参数对损失值的贡献大小。