《Keras 基础概念:张量与数据表示》
Keras 是一个高层深度学习框架,代码风格简洁。理解张量(Tensor)是掌握 Keras 与深度学习数据流的前提。本文整理张量的阶、轴(axis)与常见数据的张量表示。
1 张量
张量可以看作是向量、矩阵的自然推广,用来表示广泛的数据类型。阶(rank/dimension)用来描述张量的维度数:
- 0 阶张量 = 标量:一个单独的数。
- 1 阶张量 = 向量:一些数有序排列。
- 2 阶张量 = 矩阵:一组向量有序排列。
- 3 阶张量 = 立方体:把矩阵摞起来。例如具有 3 个颜色通道(RGB)的彩色图片。
- 4 阶张量:把立方体摞起来,无需想象其几何形态,它只是数学上的概念。
张量的阶数有时也称为维度或轴(axis)。「轴」翻译自英文 axis。例如矩阵
[[1,2],[3,4]]是一个 2 阶张量,有 2 个轴:
- 沿着第 0 个轴(与 Python 计数方式一致,从 0 开始)看到的是
[1,2]和[3,4]两个向量;- 沿着第 1 个轴看到的是
[1,3]和[2,4]两个向量。
2 用 NumPy 表示张量
import numpy as np
scalar = np.array(5) # 0 阶:标量
vector = np.array([1, 2, 3]) # 1 阶:向量,shape=(3,)
matrix = np.array([[1, 2], [3, 4]]) # 2 阶:矩阵,shape=(2, 2)
cube = np.random.rand(2, 3, 4) # 3 阶,shape=(2, 3, 4)
ndarray.shape 即每个轴上的长度,例如 (3,) 表示第 0 轴长度为 3。
3 常见数据的张量形状
| 数据 | 张量阶数 | shape 示例 | 轴含义 |
|---|---|---|---|
| 灰度图(单张) | 3 阶 | (height, width, 1) |
高、宽、通道 |
| 彩色图(单张) | 3 阶 | (height, width, 3) |
高、宽、RGB 通道 |
| 彩色图(一批) | 4 阶 | (batch, height, width, 3) |
批大小、高、宽、通道 |
| 文本 | 2 阶 | (batch, 序列长度) |
批大小、词数 |
| 时间序列(一批) | 3 阶 | (batch, 时间步, 特征数) |
批大小、时间步、特征 |
4 在 Keras 中自定义 shape
Keras 层通过参数传入期望的输入 shape(不含 batch 维度):
from tensorflow import keras
model = keras.Sequential([
keras.layers.Dense(64, activation="relu", input_shape=(784,)), # 输入 784 维向量
])
5 小结
- 时刻关注张量的 shape:Keras 绝大多数报错都源于维度不匹配。
- 轴的序号从 0 开始;
axis=-1表示最后一个轴(例如特征维/通道维)。 - 图片数据在 Keras 中统一用
(batch, height, width, channels)(channels_last)排布。
参考文档
阅读 —
·
全站 —