《Keras 基础概念:张量与数据表示》

《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)排布。

参考文档

阅读 — · 全站 —
🎸 我的歌单 0 首