听它爹说他孩儿:Keras 学习笔记 3.2

神经网络的数据表示

在前面的范例中,Numpy 保存数据的多维数组,也叫做“张量”。当前机器学习系统都以张量为基本数据结构。

张量是数据的容器,而数据几乎全是数字类型的,所以,张量是数字的容器。

张量是任意维度矩阵的产物。注意,在张量的语境中,维度常称为“轴”(axis)。

标量(零维度的张量)

可以用 Numpy 标量的属性 ndim 显示它的轴数。张量的轴数又叫它的等级(rank)。例如:

>>> import numpy as np
>>> x = np.array(12)
>>> x
array(12)
>>> x.ndim
0
向量(一维的张量)

数字的数组叫做向量或一维张量。例如:

>>> x = np.array([12, 3, 6, 14])
>>> x
array([12, 3, 6, 14])
>>> x.ndim
1

这个向量有5个成员,因而叫做 5 维向量。

别混淆了 5 维向量与 5 维张量!5 维向量只有1个轴和 5 个维度,而 5 维张量有 5 个轴,每个轴有任意多个维度。

矩阵(二维的张量)

向量的数组是矩阵,矩阵是 2 维的张量。矩阵有 2 个轴(行、列),例如:

>>> x = np.array([[5, 78, 2, 34, 0],
[6, 79, 3, 35, 1],
[7, 80, 4, 36, 2]])
>>> x.ndim
2

三维或更高维度的张量

把矩阵装入数组,得到 3 维张量。可以把它看作数字构成的立方体。例如:

>>> x = np.array([[[5, 78, 2, 34, 0],
[6, 79, 3, 35, 1],
[7, 80, 4, 36, 2]],
[[5, 78, 2, 34, 0],
[6, 79, 3, 35, 1],
[7, 80, 4, 36, 2]],
[[5, 78, 2, 34, 0],
[6, 79, 3, 35, 1],
[7, 80, 4, 36, 2]]])
>>> x.ndim
3

把 3 维张量装入数组,得到 4 维张量,等等。在深度学习中,可以创建 0 维至 4 维的张量;如果处理视觉数据,可以高达 5 维。

张量的重要属性

张量有三个重要属性定义:轴数、形状、类型。例如:

from keras.datasets import mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
Next, we display the number of axes of the tensor train_images, the ndim attribute:
>>> print(train_images.ndim)
3
Here’s its shape:
>>> print(train_images.shape)
(60000, 28, 28)
And this is its data type, the dtype attribute:
>>> print(train_images.dtype)
uint8
Numpy 操作张量
# 张量切片:选定张量中的成员
>>> my_slice = train_images[10:100]
>>> print(my_slice.shape)
(90, 28, 28)

# 指定各轴起点和终点的张量切片
>>> my_slice = train_images[10:100, :, :]
>>> my_slice.shape
(90, 28, 28)
>>> my_slice = train_images[10:100, 0:28, 0:28]
>>> my_slice.shape
(90, 28, 28)

# 全部图像的右下角 14 × 14 像素的张量切片
my_slice = train_images[:, 14:, 14:]

# 轴索引使用负数
my_slice = train_images[:, 7:-7, 7:-7]
批量化的数据
# 128个图像为一批
batch = train_images[:128]
# 下一批
batch = train_images[128:256]
# 第 n 批
batch = train_images[128 * n:128 * (n + 1)]
张量的实例
  • 向量:2 维张量 (样本, 特征)
  • 时间步等序列:3 维张量 (样本,时间步, 特征)
  • 图像:4 维张量(样本,高,宽,通道)或(样本,通道,高,宽)
  • 视频:5 维张量(样本,帧,高、宽、通道)或(样本,通道,帧,高、宽)
向量数据
这是最普通的数据形态。每个数据点可编成向量,批量化的数据编成 2 维张量(即向量数组),张量的第一个轴是样本轴,第二个轴是特征轴。看 2 个例子:
  • 人的特征分为 3 个:年龄、邮政编码、收入,形成向量。10000人的特征存入 2 维张量(10000,3)。
  • 文档的特征分为 20000个,每个特征是对应着字典中某个单词出现的次数,形成有20000个特征的向量。于是,500个文档存入张量(500,20000)。
时间步等序列数据

时间等有先后顺序的数据,作为时间轴存入 3 维张量。每个样本可编成由向量(2 维张量)组成的序列,于是批量化的数据编成 3 维张量(样本,时间步, 特征)。

为了方便,时间轴总是第二轴(索引值 1)。看2个例子:

  • 股票价格数据集。每分钟的最高价、最低价和每分钟的时刻,编成 3 维向量。而每天的交易编成 2 维张量(390,3),因为每天交易时间为 390 分钟。250天的交易数据,可以存入张量(250,390,3)。
  • 关于微博的数据集。每篇微博 280 字符,每一字符都出自有着 128 字母的字母表。每个字符可编成长度为 128 的二值向量。这个向量初始值全为零,若其中某成员值为 1,则其索引对应的字母表中的字母,是该向量的数据含意。于是,每一微博可以编成张量(280,128),一百万条微博可存入张量(1000000,280,128)。
图像数据

图像有 3 个维度:高、宽、色深。虽然灰度图像,如前面讲到的  MNIST 数字,只有一个颜色通道,因而存入 2 维张量。但是,按照惯例图像张量总是 3 维,其中一维是灰度图像的颜色通道。一批图像灰度128,尺寸  256 × 256 ,可存入张量(128, 256, 256, 1);而一批 128 种色彩的图像可存入张量(128, 256, 256, 3)。

图像张量的形态有 2 种不同的习惯设置:TensorFlow 把颜色通道放在最后一维(轴),Theano 则放在第一维(轴)。TensorFlow 把色深放在最后,如:(样本,高,宽,色深);而 Theano 的设置 将上面的例子变为(128, 1, 256, 256)和(128, 3, 256, 256)。Keras 对这两种格式都支持。

视频数据

视频数据需要 5 维张量。视频可看作帧的序列,一帧是一个彩色图像。帧可存入 3 维张量(高,宽,色深),因此,帧的序列可存入 4 维张量(帧,高,宽,色深),而一批不同的视频可存入 5 维张量(样本,幀,高,宽,色深)。

例如,YouTube 的一段视频,画面尺寸 144 × 256 ,时长 60 秒。每秒播放 4 帧,共计 240 帧。

4 段视频可存入张量(4, 240, 144, 256, 3)。这 5 个数的乘积是 106168320。如果张量类型是 float32,其体积可达 405 MB。谢天谢地!你实际遇到的视频比这个要瘦小,因为它们不用  float32 保存,并且以大比例压缩了,比如  MPEG 格式。














  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值