10分钟看懂深度学习的基本数据类型——张量

简介: 10分钟看懂深度学习的基本数据类型——张量

张量的属性


  • 轴数(阶):Numpy 中用 ndim 表示,例如,3D 张量有 3 个轴(ndim == 3)。
  • 形状:Numpy 中用 shape 表示。它是张量沿每个轴的维度大小(元素个数)。
  • 数据类型:Numpy 中用 dtype 表示。这是张量中所包含数据的类型。


常见的几种张量


标量(0D 张量)

仅包含一个数值的张量叫作标量(0D 张量)。标量有 0 个轴(ndim == 0)。看个例子。

>>> import numpy as np
>>> a = np.array(2)
>>> a
array(2)
>>> a.ndim
0
>>> a.shape
()
>>> a.dtype
dtype('int32')
复制代码

标量的形状为空。


向量(1D 张量)

数值组成的数组叫作向量(vector)或一维张量(1D 张量)。一维张量只有一个轴。看个例子。

>>> a = np.array([1, 2, 3, 4])
>>> a
array([1, 2, 3, 4])
>>> a.ndim
1
>>> a.shape
(4,)
复制代码

上面的例子,创建了一个 1D 张量,这里的 1 指的是有一个轴;也可以叫做 4D 向量,这里的 4 表示的是沿着轴有 4 个维度。不要混淆!


矩阵(2D 张量)

向量组成的数组叫作矩阵(matrix)或二维张量(2D 张量)。看个例子。

>>> a = np.array([[1, 2, 3],
                  [2, 3, 4]])
>>> a
array([[1, 2, 3],
       [2, 3, 4]])
>>> a.ndim
2
>>> a.shape
(2, 3)
复制代码

在上面的例子中, [1, 2, 3]是矩阵的第一行,[1, 2]是第一列。


3D 张量

将多个矩阵组合成一个新的数组,可以得到一个 3D 张量,可以看成是一个立方体。看个例子。

>>> a = np.array([[[1, 2, 3],
                   [2, 3, 4]],
                  [[1, 2, 3],
                   [2, 3, 4]],
                  [[1, 2, 3],
                   [2, 3, 4]]])
>>> a
array([[[1, 2, 3],
        [2, 3, 4]],
       [[1, 2, 3],
        [2, 3, 4]],
       [[1, 2, 3],
        [2, 3, 4]]])
>>> a.ndim
3
>>> a.shape
(3, 2, 3)
复制代码


更高为张量

将多个 3D 张量组合成一个数组即是 4D 张量,以此类推,一般机器学习处理的都是 0D~5D 张量。


数据批量

在上一篇文章中手写数字分类训练网络时,我们用到了 batch_size

network.fit(train_images, train_labels, epochs=5, batch_size=128)
复制代码


深度学习模型不会同时处理整个数据集,而是将数据拆分成小批量,每次训练在训练集中取 128 个样本进行训练。

# 第1个批量
batch = train_images[:128]
# 第2个批量
batch = train_images[128:256]
# 第n个批量
batch = train_images[128 * n: 128 * (n + 1)]
复制代码


每一个批量的形状都是相同的。

>>> batch.shape
(128, 784)
复制代码

对于这种批量张量,第一个轴(0轴)叫作批量轴或批量维度,此处的批量维度为 128。


现实世界中的数据张量

向量数组(2D 张量)

这是最常见的数据。它是由向量组成的数组,第一个轴是样本轴,第二个轴是特征轴

案例

  • 人口统计数据集,包括三个特征:年龄、电话和收入。因此可以存储在形状为 (x, 3) 的 2D 张量中,x 为统计人数。


时间序列数据(3D 张量)

当数据集中时间(或序列顺序)对于数据很重要时,应该将数据存储在带有时间轴的 3D 张量中。 每个样本可以被编码为一个向量序列(即 2D 张量),而一个数据批量就是一个 3D 张量。

image.png


案例

  • 股票价格数据集。每一分钟,我们记录股票的当前价格、上一分钟的最高价格和上一分钟的最低价格。整个交易日保存在形状为 (x, 3) 的 2D 张量(x 统计时长)中,而 300 天的数据则可以保存在形状为(300, x, 3)的 3D 张量中。这里每个样本是一天的股票数据。


图像数据(4D 张量)

图像通常具有三个维度:高度、宽度和颜色深度。虽然灰度图像(比如 MNIST 数字图像) 只有一个颜色通道,因此可以保存在 2D 张量中。

如果图像大小为 256×256,

  • 128 张灰度图像组成的批量可以保存在一个形状为(128, 256, 256, 1)的张量中
  • 128 张彩色图像组成的批量则可以保存在一个形状为(128, 256, 256, 3)的张量中。


image.png

图像张量的形状有两种约定:

  1. TensorFlow 将颜色深度轴放在最后:(samples, height, width, color_depth)
  2. Theano 将图像深度轴放在批量轴之后:(samples, color_depth, height, width)

按照 Theano 的约定,前面的两个例子将变成(128, 1, 256, 256)与(128, 3, 256, 256)。

Keras 框架同时支持这两种格式。

下一篇我们学习张量的运算特点。



相关文章
|
3月前
|
机器学习/深度学习 算法 PyTorch
【深度学习】TensorFlow面试题:什么是TensorFlow?你对张量了解多少?TensorFlow有什么优势?TensorFlow比PyTorch有什么不同?该如何选择?
关于TensorFlow面试题的总结,涵盖了TensorFlow的基本概念、张量的理解、TensorFlow的优势、数据加载方式、算法通用步骤、过拟合解决方法,以及TensorFlow与PyTorch的区别和选择建议。
261 2
|
3月前
|
机器学习/深度学习 Serverless 数据处理
《零基础实践深度学习》 Numpy 线性代数 应用举例 张量表示
这篇文章介绍了NumPy在线性代数中的应用,包括矩阵操作和文件读写功能,并提供了使用NumPy进行图片处理和激活函数计算的示例,同时探讨了飞桨框架中张量(Tensor)的使用和与NumPy数组的转换。
|
6月前
|
机器学习/深度学习 存储 PyTorch
PyTorch深度学习基础:张量(Tensor)详解
【4月更文挑战第17天】本文详细介绍了PyTorch中的张量,它是构建和操作深度学习数据的核心。张量是多维数组,用于存储和变换数据。PyTorch支持CPU和GPU张量,后者能加速大规模数据处理。创建张量可通过`torch.zeros()`、`torch.rand()`或直接从Python列表转换。张量操作包括数学运算、切片和拼接。在深度学习中,张量用于神经网络模型的构建和训练。理解张量对于掌握PyTorch至关重要。
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【深度学习】Pytorch Tensor 张量
【1月更文挑战第10天】【深度学习】Pytorch Tensor 张量
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【深度学习】Pytorch Tensor 张量
【1月更文挑战第26天】【深度学习】Pytorch Tensor 张量
|
机器学习/深度学习
深度学习:张量 介绍
深度学习:张量 介绍
347 1
|
6月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
【深度学习】Tensorflow、MindSpore框架介绍及张量算子操作实战(超详细 附源码)
【深度学习】Tensorflow、MindSpore框架介绍及张量算子操作实战(超详细 附源码)
210 0
|
机器学习/深度学习 索引
深度学习基础:标量、向量、矩阵、张量
深度学习基础:标量、向量、矩阵、张量
946 0
深度学习基础:标量、向量、矩阵、张量
|
机器学习/深度学习 PyTorch 算法框架/工具
深度学习Pytorch框架Tensor张量
深度学习Pytorch框架Tensor张量
73 0
|
机器学习/深度学习
《深度学习500问》张量和矩阵的区别
《深度学习500问》张量和矩阵的区别
180 0
下一篇
无影云桌面