张量(Tensor)、标量(scalar)、向量(vector)、矩阵(matrix)

张量(Tensor):Tensor = multi-dimensional array of numbers 张量是一个多维数组,它是标量,向量,矩阵的高维扩展 ,是一个数据容器,张量是矩阵向任意维度的推广

注意,张量的维度(dimension)通常叫作轴(axis), 张量轴的个数也叫作阶(rank)]

标量(scalar):只有一个数字的张量叫标量(也叫标量张量、零维张量、0D 张量)

x = np.array(12)
print(x.ndim) 可以用 ndim 属性来查看一个 Numpy 张量的轴的个数。标量张量有 0 个轴( ndim == 0 )。

向量(vector):数字组成的数组叫作向量(vector)或一维张量(1D 张量)。一维张量只有一个轴。下面是一个 Numpy 向量

np.array([12, 3, 6, 14, 7])
这个向量有 5 个元素,所以被称为 5D 向量。不要把 5D 向量和 5D 张量弄混! 5D 向量只有一个轴,沿着轴有 5 个维度,而 5D 张量有 5 个轴(沿着每个轴可能有任意个维度)

矩阵(matrix):是一个按照长方阵列排列的复数或实数集合,矩阵是二维张量(2D 张量)

np.array([[5, 78, 2, 34, 0], [6, 79, 3, 35, 1], [7, 80, 4, 36, 2]])
向量组成的数组叫作矩阵(matrix)或二维张量(2D 张量)。矩阵有 2 个轴(通常叫作行和列)。你可以将矩阵直观地理解为数字组成的矩形网格。下面是一个 Numpy 矩阵。

3D 张量n 维张量
将多个矩阵组合成一个新的数组,可以得到一个 3D 张量,你可以将其直观地理解为数字组成的立方体。下面是一个 Numpy 的 3D 张量。

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]]])

将多个 3D 张量组合成一个数组,可以创建一个 4D 张量,以此类推。深度学习处理的一般是 0D 到 4D 的张量,但处理视频数据时可能会遇到 5D 张量。

image

image

张量属性

张量是由以下三个关键属性来定义的。

  • 轴的个数(阶):例如,3D 张量有 3 个轴,矩阵有 2 个轴。这在 Numpy 等 Python 库中也叫张量的 ndim 。
  • 形状(shape):这是一个整数元组,表示张量沿每个轴的维度大小(元素个数)。例如,前面矩阵示例的形状为 (3, 5) ,3D 张量示例的形状为 (3, 3, 5) 。向量的形状只包含一个元素,比如 (5,) ,而标量的形状为空,即 () 。(张量的形状)
  • 数据类型(dtype):这是张量中所包含数据的类型,例如,张量的类型可以是 float32 、 uint8 、 float64 等。在极少数情况下,你可能会遇到字符( char )张量。注意:Numpy(以及大多数其他库)中不存在字符串张量,因为张量存储在预先分配的连续内存段中,而字符串的长度是可变的,无法用这种方式存储。

data:    Tensor的值;
dtype:    Tensor的数据类型;
shape:    Tensor的形状;
device:    Tensor所在的设备(CPU/GPU);
requires_grad:    是否需要梯度;
grad:    Tensor的梯度;
grad_fn:    创建Tensor的函数;
is_leaf:    是否是叶子节点

image

数据张量

向量数据:2D 张量,形状为 (samples, features)

这是最常见的数据。对于这种数据集,每个数据点都被编码为一个向量,因此一个数据批量就被编码为 2D 张量(即向量组成的数组),其中第一个轴是样本轴,第二个轴是特征轴。
例子:

  • 人口统计数据集,其中包括每个人的年龄、邮编和收入。每个人可以表示为包含 3 个值的向量,而整个数据集包含 100 000 个人,因此可以存储在形状为 (100000, 3) 的 2D张量中。
  • 文本文档数据集,我们将每个文档表示为每个单词在其中出现的次数(字典中包含20 000 个常见单词)。每个文档可以被编码为包含 20 000 个值的向量(每个值对应于字典中每个单词的出现次数),整个数据集包含 500 个文档,因此可以存储在形状为(500, 20000) 的张量中。

时间序列数据或序列数据:3D 张量,形状为 (samples, timesteps, features)

当时间(或序列顺序)对于数据很重要时,应该将数据存储在带有时间轴的 3D 张量中。每个样本可以被编码为一个向量序列(即 2D 张量),因此一个数据批量就被编码为一个 3D 张量(见下图)
image
根据惯例,时间轴始终是第 2 个轴(索引为 1 的轴)。

我们来看几个例子。

  • 股票价格数据集。每一分钟,我们将股票的当前价格、前一分钟的最高价格和前一分钟的最低价格保存下来。因此每分钟被编码为一个 3D 向量,整个交易日被编码为一个形状为 (390, 3) 的 2D 张量(一个交易日有 390 分钟),而 250 天的数据则可以保存在一个形状为 (250, 390, 3) 的 3D 张量中。这里每个样本是一天的股票数据。
  • 推文数据集。我们将每条推文编码为 280 个字符组成的序列,而每个字符又来自于 128个字符组成的字母表。在这种情况下,每个字符可以被编码为大小为 128 的二进制向量(只有在该字符对应的索引位置取值为 1,其他元素都为 0)。那么每条推文可以被编码为一个形状为 (280, 128) 的 2D 张量,而包含 100 万条推文的数据集则可以存储在一个形状为 (1000000, 280, 128) 的张量中。

图像:4D张量,形状为 (samples, height, width, channels) 或 (samples, channels,height, width) 。

图像通常具有三个维度:高度、宽度和颜色深度。虽然灰度图像(比如 MNIST 数字图像)只有一个颜色通道,因此可以保存在 2D 张量中,但按照惯例,图像张量始终都是 3D 张量,灰度图像的彩色通道只有一维。因此,如果图像大小为 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) 。如果采用 Theano 约定,前面的两个例子将变成 (128, 1, 256, 256) 和 (128, 3, 256, 256) 。Keras 框架同时支持这两种格式。

如下图所示是一张普通的水果图片,按照RGB三原色表示,其可以拆分为红色、绿色和蓝色的三张灰度图片,如果将这种表示方法用张量的形式写出来,就是图中最下方的那张表格
image
image
图中只显示了前5行、320列的数据,每个方格代表一个像素点,其中的数据[1.0, 1.0, 1.0]即为颜色。假设用[1.0, 0, 0]表示红色,[0, 1.0, 0]表示绿色,[0, 0, 1.0]表示蓝色,那么如图所示,前面5行的数据则全是白色

用四阶张量表示一个包含多张图片的数据集,其中的四个维度分别是:图片在数据集中的编号,图片高度、宽度,以及色彩数据。

视频:5D张量,形状为 (samples, frames, height, width, channels) 或 (samples,frames, channels, height, width)

视频数据是现实生活中需要用到 5D 张量的少数数据类型之一。视频可以看作一系列帧,每一帧都是一张彩色图像。由于每一帧都可以保存在一个形状为 (height, width, color_depth) 的 3D 张量中,因此一系列帧可以保存在一个形状为 (frames, height, width,color_depth) 的 4D 张量中,而不同视频组成的批量则可以保存在一个 5D 张量中,其形状为(samples, frames, height, width, color_depth) 。

举个例子,一个以每秒 4 帧采样的 60 秒 YouTube 视频片段,视频尺寸为 144×256,这个视频共有 240 帧。4 个这样的视频片段组成的批量将保存在形状为 (4, 240, 144, 256, 3)的张量中。总共有 106 168 320 个值!如果张量的数据类型( dtype )是 float32 ,每个值都是32 位,那么这个张量共有 405MB。好大!你在现实生活中遇到的视频要小得多,因为它们不以float32 格式存储,而且通常被大大压缩,比如 MPEG 格式。

image
image
image
image

原文链接:https://www.cnblogs.com/vipsoft/p/17361876.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:张量(Tensor)、标量(scalar)、向量(vector)、矩阵(matrix) - Python技术站

(0)
上一篇 2023年5月11日
下一篇 2023年5月11日

相关文章

  • PyTorch固定参数

    In situation of finetuning, parameters in backbone network need to be frozen. To achieve this target, there are two steps. First, locate the layers and change their requires_grad a…

    PyTorch 2023年4月8日
    00
  • 循环神经网络RNN详解

    概念 什么是RNN? RNN是一种特殊的神经网络结构, 它是根据”人的认知是基于过往的经验和记忆”这一观点提出的. 它与DNN,CNN不同的是: 它不仅考虑前一时刻的输入,而且赋予了网络对前面的内容的一种’记忆’功能. RNN之所以称为循环神经网路,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即…

    2023年4月7日
    00
  • 卷积神经网络与典型结构

    一、神经网络与卷积神经网络   0.DNN(MLP多层感知器)能用到计算机视觉上吗?为什么需要CNN     DNN可以用在计算机视觉上,   1.卷积神经网络和人工神经网络的差异在哪里?          为什么需要卷积神经网络。下面是一个32x32x3的图片,隐层一般为1024或者4096的维度。输入维度是4k左右,隐层在1024维度。这会导致过拟合和太…

    2023年4月8日
    00
  • 【CNN】— 卷积过程中RGB与灰度的区别

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/hacker_Dem_br/article/details/88786661 RGB image 输入的图像有RGB3个channel,假设有100个filter,输出的就有100个feature m…

    2023年4月7日
    00
  • 使用 Keras + CNN 识别 MNIST 手写数字

    导入模块: from keras.datasets import mnist from keras.utils import np_utils import numpy as np import matplotlib.pyplot as plt from keras.models import Sequential from keras.layers imp…

    2023年4月6日
    00
  • docker安装caffe

    【最近一直想要学习caffe,但是苦苦纠结于环境安装不上,真的是第一步都迈不出去,还好有docker的存在!下面,对本人如何利用docker安装caffe做以简单叙述,不属于教程,只是记录自己都做了什么,方便以后查看,本人菜鸟一枚,虽然安装上了,但很多细节并不清楚】 为了能够在安装docker时方便一些,毅然决然将window7换为了ubuntu系统! 1.…

    Caffe 2023年4月8日
    00
  • caffe+opencv3.3.1

    跟着时代走 换成opencv3.3.1,目前来看所有的都是最新版了。 anaconda最新,opencv最新,我看了protobuf也很新。 下次再买台服务器时,我想直接用python来弄,因为这次安装opencv3时,有些anaconda的包太旧了,会有冲突。只好卸载,但是卸载掉又会关联到别的包也要同时卸载,但是别的包又要用,于是只要再另外装,所以下次服务…

    Caffe 2023年4月6日
    00
  • 自相关函数怎么理解,为什么定义中有共轭,卷积呢。定义中的卷积,共轭有什么意义?尤其是在信号处理方面

    知乎上有解答,相当经典:https://www.zhihu.com/question/24687047   简洁地解释如下: 1) 首先我们仅考虑实信号。 自相关的直观含义就是:把一个信号平移一段距离,跟原来有多相似。 于是就有了自相关的定义: 它代表了“移、乘、积”这三步操作。   如果只谈自相关,其实到此就可以结束了。 只不过,在信号处理领域中还有一个叫…

    2023年4月5日
    00
合作推广
合作推广
分享本页
返回顶部