2.2 神经网络的数据表示
张量:数字的容器。
2.2.1 标量(0D张量)
仅包含一个数字的张量叫做标量(scalar, 也叫标量张量,零维张量,0D张量)
使用ndim
属性查看Numpy
张量的轴的个数。标量张量有0个轴(ndim == 0
)。张量轴的个数也叫阶(rank)
import numpy as np
x = np.array(12)
x
>>> array(12)
x.ndim
>>> 0
2.2.2 向量(1D张量)
一维张量只有一个轴。一个轴称作一个阶。
2.2.3 矩阵(2D张量)
向量组成的数组叫做矩阵或二维张量(2D张量)。矩阵有2个轴,一个行和一个列
2.2.4 3D张量与更高维张量
多个矩阵组合成一个新的数组,可以得到一个3D张量。
2.2.5 关键属性
张量由三个关键属性来定义:
- 轴的个数(阶):3D张量有3个轴,矩阵有2个轴
- 形状:整数元组,表示张量沿每个轴的维度大小(元素个数)。标量的形状维空,即()
- 数据类型:张量中所包含数据的类型
把mnist
数据显示成图片
digit = train_images[4]# 只显示第四个数据的图片
import matplotlib.pyplot as plt
plt.imshow(digit, cmap = plt.cm.binary)
plt.show()
2.2.6 在Numpy中操作张量
张量的切片
my_slice = train_images[10:100]
print(my_slice.shape)
>>> (90, 28, 28)
也可以沿着每个张量轴在任意两个索引之间进行选者。例如,可以在所有图像的右下角选出14像素*14像素的区域:my_slice = train_iamges[:, 14:, 14:]
也可以使用负数索引。与 Python 列表中的负数索引类似,它表示与当前轴终点的相对位置。 你可以在图像中心裁剪出 14 像素×14 像素的区域:my_slice = train_images[:, 7:-7, 7:-7]
2.2.7 数据批量的概念
0轴都是样本轴(samples axis),取批量的时候就是沿着这个轴切片
2.2.8 现实世界中的数据张量
- 向量数据:2D张量,形状为(samples, features)。
- 时间序列数据或序列数据:3D 张量,形状为 (samples, timesteps, features)。
- 图像:4D张量,形状为(samples, height, width, channels)或(samples, channels, height, width)。
- 视频:5D张量,形状为(samples, frames, height, width, channels)或(samples, frames, channels, height, width)。
2.2.9 向量数据
第一个轴是样本轴,第二个轴是特征轴
2.2.10 时间序列数据或序列数据
举个栗子:
- 股票价格数据集:股票价格数据集。每一分钟,我们将股票的当前价格、前一分钟的最高价格和前一分钟 的最低价格保存下来。因此每分钟被编码为一个 3D 向量,整个交易日被编码为一个形 状为(390, 3)的 2D 张量(一个交易日有 390 分钟),而 250 天的数据则可以保存在一 个形状为(250, 390, 3)的 3D 张量中。这里每个样本是一天的股票数据。
2.2.11 图像数据
图像通常具有三个维度:高度,宽度和颜色深度。
如果图像大小为256×256,那么128张灰度图像组成的批量可以保存在一个形状为(128, 256, 256, 1)的张量中,而128张彩色图像组成的批量则可以保存为一个形状为(128, 256, 256, 3)的张量中。
图像张量的形状有两种约定:通道在后(channels-last)的约定(在 TensorFlow 中使用)和 通道在前(channels-first)的约定(在 Theano 中使用)。Google 的 TensorFlow 机器学习框架将 颜色深度轴放在最后:(samples, height, width, color_depth)
。与此相反,Theano 将图像深度轴放在批量轴之后:(samples, color_depth, height, width)
。
2.2.12 视频数据
视频数据是5D张量。
视频可以看作一系列帧, 每一帧都是一张彩色图像。由于每一帧都可以保存在一个形状为 (height, width, color_ depth)
的 3D 张量中,因此一系列帧可以保存在一个形状为(frames, height, width, color_depth)
的 4D 张量中,而不同视频组成的批量则可以保存在一个 5D 张量中,其形状为(samples, frames, height, width, color_depth)
。
2.3 神经网络的“齿轮”:张量运算
深度神经网络学到的所有变换也都可以简化为数值数据张量上的一些张量运算(tensor operation)
2.3.1 逐元素运算
relu运算和加法都是**逐元素(element-wise)**的运算,即该运算独立地应用于张量中的每个元素。
2.3.2 广播
广播包括以下两步:
-
- 向较小的张量添加轴(广播轴),使ndim与较大的张量相同。
-
- 将较小的张量沿着新轴重复,使其形状与较大的张量相同。
2.3.3 张量点积
点积运算,也叫张量积 。就是矩阵/向量的乘法
2.3.4 张量变形
reshape