深度学习中的张量维度

1 深度学习中的张量

在深度学习框架中,Tensor(张量)是一种数据结构,用于存储和操作多维数组。张量可以被视为一种扩展的矩阵,它可以具有任意数量的维度。

在深度学习中,张量通常被用来表示神经网络的输入、输出、权重和梯度等数据。在深度学习框架中,张量是一个重要的概念,因为它是深度学习计算的基本单位。

张量可以用不同的数据类型表示,如浮点型、整型等。在深度学习框架中,通常使用GPU来加速张量的计算,因为GPU具有并行计算能力,可以快速地执行大量的矩阵和向量运算。

深度学习框架通常提供了一些张量操作函数,如矩阵乘法、卷积、池化等,使得用户可以方便地进行张量计算。

2 张量的基本属性

主要有三个属性:秩、轴、形状

  • 秩:主要告诉我们是张量的维度,其实就是告诉我们是几维向量,通过多少个索引就可以访问到元素。
  • 轴:在张量中,轴是指张量的一个维度。当处理多维数据时,每个维度都可以被称为一个轴。通常,第一个轴称为0轴(或轴0),第二个轴称为1轴(或轴1),以此类推。
  • 形状:形状是指张量在每个轴上的维度大小。它是一个由整数组成的元组,表示张量沿着每个轴的大小。
     

3 张量的维度

3.1 标量(0D 张量)

仅包含一个数字的张量叫作标量(scalar,也叫标量张量、零维张量、0D 张量)。在 Numpy中,一个 float32 或 float64 的数字就是一个标量张量(或标量数组)。你可以用 ndim 属性来查看一个 Numpy 张量的轴的个数。标量张量有 0 个轴( ndim == 0 )。张量轴的个数也叫作阶(rank)。下面是一个 Numpy 标量。

    import numpy as npx = np.array(12)print(x.ndim)x

结果:

    0array(12)

3.2 向量(1D 张量)

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

    import numpy as npx = np.array([12, 3, 6, 14, 7])print(x.ndim)x

结果:

    1array([12, 3, 6, 14, 7])

注意:这个向量有 5 个元素,所以被称为 5D 向量。不要把 5D 向量和 5D 张量弄混! 5D 向量只有一个轴,沿着轴有 5 个维度,而 5D 张量有 5 个轴(沿着每个轴可能有任意个维度)。维度(dimensionality)可以表示沿着某个轴上的元素个数(比如 5D 向量),也可以表示张量中轴的个数(比如 5D 张量),这有时会令人感到混乱。对于后一种情况,技术上更准确的说法是 5 阶张量(张量的阶数即轴的个数),但 5D 张量这种模糊的写法更常见。

3.3 矩阵(2D 张量)

向量组成的数组叫作矩阵(matrix)或二维张量(2D 张量)。矩阵有 2 个轴(通常叫作行和列)。你可以将矩阵直观地理解为数字组成的矩形网格。下面是一个 Numpy 矩阵。

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

结果:

    2

3.4 3D 张量与更高维张量

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

    import numpy as npx = 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]]])print(x.ndim)

 结果: 

    3

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

4 现实世界中的数据张量

我们现实中要处理的数据几乎总是以下类别之一:

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

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

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

  • height, width) 。

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

 4.1 向量数据

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

两个例子:

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

 4.2 时间序列数据或序列数据

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

根据惯例,时间轴始终是第 2 个轴(索引为 1 的轴)。

两个例子:

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

 4.3 图像数据

图像通常具有三个维度:高度、宽度和颜色深度。虽然灰度图像(比如 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 框架同时支持这两种格式。

4.4 视频数据

视频数据是现实生活中需要用到 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 格式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/234155.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Cloud微服务 - Eureka注册中心详解与实际项目应用

简介 在如今的软件开发领域,微服务架构已成为一种流行的架构模式,它将一个大型应用拆分成多个小的、独立运行的微服务。而为了管理这些微服务的注册与发现,Spring Cloud提供了Eureka注册中心。本文将深入探讨Eureka注册中心的工作原理&#…

PowerDesigner生成数据字典

这里写自定义目录标题 1,创建物理模型2,创建数据源连接3,获取表4,创建报告 先看下最终效果 1,创建物理模型 2,创建数据源连接 填写数据源连接信息 测试连接是否成功 3,获取表 连接刚创建的数…

使用多个GBASE南大通用DataAdapter 填充 DataSet

一个 DataSet 可以与很多GBASE南大通用DataAdapter 对象一起使用。每个GBASE南大通用DataAdapter 都可用于填充一个或多个 DataTable 对象并将更新解析回数据源。DataRelation 对象可以在本地添加到 DataSet,这样您就可以关联来自不同数据源的数据。一个或多个 GBAS…

Springboot数据校验与异常篇

一、异常处理 1.1Http状态码 HTTP状态码是指在HTTP通信过程中,服务器向客户端返回的响应状态。它通过3位数字构成,第一个数字定义了响应的类别,后两位数字没有具体分类作用。以下是常见的HTTP状态码及其含义: - 1xx(信…

react基于antd二次封装分页组件Pagination

目录 react基于antd二次封装分页组件Pagination组件PaginationCom使用组件 react基于antd二次封装分页组件Pagination 组件PaginationCom import { Pagination } from antd; import propTypes from "prop-types"; import React from react;const PaginationCom (p…

网络安全工作者应该注意的八大事项!

1、珍惜给老板汇报的机会 能够称为“企业家”的老板,往往都是“管理学”的精英,也往往对生产安全工作略知一二,在向其汇报工作时,请突出重点、言简意赅,在抛出问题的同时,一定要提出相应的解决措施&#x…

[PyTorch][chapter 8][李宏毅深度学习][Back propagation]

前言: 反向传播算法(英:Backpropagation algorithm,简称:BP算法)是一种监督学习算法,常被用来训练多层感知机。 它用于计算梯度计算中,降低误差。 目录: 链式法则 模型简介(Model) 损失函…

【MATLAB第84期】基于MATLAB的波形叠加极限学习机SW-ELM代理模型的sobol全局敏感性分析法应用

【MATLAB第84期】基于MATLAB的波形叠加极限学习机SW-ELM代理模型的sobol全局敏感性分析法应用 前言 跟往期sobol区别: 1.sobol计算依赖于验证集样本,无需定义变量上下限。 2.SW-ELM自带激活函数,计算具有phi(x)e^x激…

Unity--解析ET6接入ILRuntime实现热更

前言 1.介绍 ILRuntime项目为基于C#的平台(例如Unity)提供了一个纯C#实现,快速、方便且可靠的IL运行时,使得能够在不支持JIT的硬件环境(如iOS)能够实现代码的热更新。学习交流聚集地 介绍 — ILRuntime …

第二证券:诱多诱空是指什么?股民该如何应对?

诱多诱空是指什么? 诱多诱空各指代主力的一类操盘行为。诱多是指主力有意营建股价上涨的假象,从而诱使不知情股民买入该股,主力趁机抛售股票离场,因为本身股价上涨靠主力一手织造,主力撤资后股价会回落,买…

Python:读取文件的文件名、后缀名

import os import pathlib fp "D:/data/outputs/abc.jpg" os.path.basename(fp) # 带后缀的文件名 # abc.jpgpathlib.Path(fp).stem # 不带后缀的文件名 # abc fp_1 os.path.splitext(fp)[0] fp_1.split(/)[-1] # 不带后缀的文件名 # abc basename os.path.bas…

麻雀规则解析器

规则解析器 上一篇讲的规则设计器的成果只是JSON数据,具体的规则执行则由不同的解析器来执行和编译。 目前市场上的规则引擎很多。但其实大部分都是表达式引擎,相当于对动态表达式进行编译和解析 Java语言的有:Drools(业界有名)、Janino、…

【程序员】程序员的护城河:技术、创新还是沟通?

在IT行业,我们深知程序员在保障系统安全、数据防护以及网络稳定方面的重要作用。他们是我们现代社会的护城河,用代码构筑着我们的未来。但是,程序员的护城河又是什么呢?是技术能力的深度?是对创新的追求?还…

Next.js 学习笔记(三)——路由

路由 路由基础知识 每个应用程序的骨架都是路由。本页将向你介绍互联网路由的基本概念以及如何在 Next.js 中处理路由。 术语 首先,你将在整个文档中看到这些术语的使用情况。以下是一个快速参考: 树(Tree):用于可…

2023-12-18 C语言实现一个最简陋的B-Tree

点击 <C 语言编程核心突破> 快速C语言入门 C语言实现一个最简陋的B-Tree 前言要解决问题:想到的思路:其它的补充: 一、C语言B-Tree基本架构: 二、可视化总结 前言 要解决问题: 实现一个最简陋的B-Tree, 研究B-Tree的性质. 对于B树, 我是心向往之, 因为他是数据库的基…

云原生系列2-CICD持续集成部署-GitLab和Jenkins

1、CICD持续集成部署 传统软件开发流程&#xff1a; 1、项目经理分配模块开发任务给开发人员&#xff08;项目经理-开发&#xff09; 2、每个模块单独开发完毕&#xff08;开发&#xff09;&#xff0c;单元测试&#xff08;测试&#xff09; 3、开发完毕后&#xff0c;集成部…

3A服务器 (hcia)

原理 认证&#xff1a;验证用户是否可以获得网络访问权。 授权&#xff1a;授权用户可以使用哪些服务。 计费&#xff1a;记录用户使用网络资源的情况 实验 步骤 1.配置ip地址 2.配置认证服务器 aaa authentication-scheme datacom&#xff08;认证服务器名字&#xf…

2024 年 8 个顶级开源 LLM(大语言模型)

如果没有所谓的大型语言模型&#xff08;LLM&#xff09;&#xff0c;当前的生成式人工智能革命就不可能实现。LLM 基于 transformers&#xff08;一种强大的神经架构&#xff09;是用于建模和处理人类语言的 AI 系统。它们之所以被称为“大”&#xff0c;是因为它们有数亿甚至…

iPhone手机开启地震预警功能

iPhone手机开启地震预警功能 地震预警告警开启方式 地震预警 版权&#xff1a;成都高新减灾研究所 告警开启方式

CSS浮动

前置传统网页布局的三种方式&#xff1a; 标准流&#xff08;普通流/文档流&#xff09;&#xff1a; 浮动流&#xff1a; 定位流&#xff1a; 浮动: 实现元素在一行中向哪个方向排列 浮动后的元素还是可以设置边距的。 float默认是不会继承&#xff0c;但是可以强制设置flo…