Pytorch使用教学2-Tensor的维度

在这里插入图片描述

PyTorch使用的过程中,维度转换一定少不了。而PyTorch中有多种维度形变的方法,我们该在什么场景下使用什么方法呢?

本小节我们使用的张量如下:

# 一维向量
t1 = torch.tensor((1, 2))
# 二维向量
t2 = torch.tensor([[1, 2, 3], [4, 5, 6]])
# 三维向量
t3 = torch.tensor([[[1, 2], [3, 4]],[[5, 6], [7, 8]]])

1 张量的维度与形状

张量为一组数的结构化表示。简单理解,向量就是一维数组,矩阵为二维数组,此外我们还可以定义更高维度的数组。张量的高维数组和Numpy中高维Array概念类似。

1.1 ndim查看张量维度

print(t1.ndim, t2.ndim, t3.ndim, sep = ', ')
# 1, 2, 3
# t1为1维向量
# t2为2维矩阵
# t3为3维张量

1.2 shape&size()查看向量的形状

print(t1.shape, t2.shape, t3.shape, sep = ', ')
# torch.Size([2]), torch.Size([2, 3]), torch.Size([2, 2, 2])print(t1.size(), t2.size(), t3.size(), sep = ', ')
# torch.Size([2]), torch.Size([2, 3]), torch.Size([2, 2, 2])

t1向量torch.Size([2])的理解:向量的形状是1行2列。

t2矩阵torch.Size([2, 3])的理解:包含两个一维向量,每个一维向量的形状是1行3列。

t3矩阵torch.Size([2, 2, 2])的理解:包含两个二维矩阵,每个二维矩阵的形状是2行2列。

1.3 numel()查看张量中的元素个数

print(t1.numel(), t2.numel(), t3.numel(), sep = ', ')
# 2, 6, 8
# t1向量中共有2个元素
# t2矩阵中共有6个元素
# t3张量中共有8个元素

1.4 形状相同的数组可创建一个高维张量

import numpy as np
a1 = np.array([[1, 2], [3, 4]])
a2 = np.array([[5, 6], [7, 8]])
t3 = torch.tensor([a1, a2])
print(t3)
# tensor([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])

2 张量的形变

2.1 flatten()将任意维度张量转为一维张量

t2.flatten()
# tensor([1, 2, 3, 4, 5, 6])t3.flatten()
# tensor([1, 2, 3, 4, 5, 6, 7, 8])

2.2 reshape()任意变形

形变维度的乘积需要等于张量元素的个数。

# 将`t3`变成2×4的矩阵
t3.reshape(2, 4)
#tensor([[1, 2, 3, 4],[5, 6, 7, 8]])# 将`t3`变成1×4×2的矩阵
t3.reshape(1, 4, 2)
# tensor([[[1, 2], [3, 4], [5, 6], [7, 8]]])

2.3 squeeze()&unsqueeze()

  • squeeze()的作用是压缩张量,去掉维数为1位置的维度
# 将t3的维度变为2×1×4
t_214 = t3.reshape(2, 1, 4)
print(t_214)
# tensor([[[1, 2, 3, 4]], [[5, 6, 7, 8]]])# 使用squeeze()将其变成2×4,去掉维度为1位置的维度
t_24 = t_214.squeeze(1)
print(t_24)
# tensor([[1, 2, 3, 4], [5, 6, 7, 8]])
  • unsqueeze()的作用是解压张量,给指定位置加上维数为一的维度。
# 将2×4的维度再转换成2×1×4,在第二个维度上加一维
# 索引是从0开始的。参数0代表第一维,参数1代表第二维,以此类推
print(t_24.unsqueeze(1))
tensor([[[1, 2, 3, 4]], [[5, 6, 7, 8]]])

2.4 维度变化总结

一般我们最常使用的就是flatten()reshape()。仔细思考的同学们肯定也可以发现,reshape()也可以实现flatten()的功能,reshape()所需的参数就是张量中的元素数。

print(t3.flatten())
# tensor([1, 2, 3, 4, 5, 6, 7, 8])print(t3.reshape(t3.numel()))
# tensor([1, 2, 3, 4, 5, 6, 7, 8])

3 特殊的零维张量

Tensor的零维张量只包含一个元素,可以理解为标量,只有大小,没有方向。

3.1 零维张量的属性

# 零维张量的创建只有一个数,不具备一维或多维的概念
t0 = torch.tensor(1)# 因为它是标量,所以维度是0
print(t0.ndim)
# 0# 因为它是标量,所以也不具有形状
print(t0.shape)
# torch.Size([])# 它没有维度,但是有一个数
print(t0.numel())
# 1

3.2 零维张量的转化

使用flatten()reshape()可以将标量转为向量。

t0 = torch.tensor(1)
print(t0.flatten())
# tensor([1])t0 = torch.tensor(1)
print(t0.reshape(1))
# tensor([1])

4 再谈什么是张量

在这里插入图片描述
Tensor是一个多维数组,它是标量、向量、矩阵的高维拓展。

Pytorch张量操作大全:

Pytorch使用教学1-Tensor的创建
Pytorch使用教学2-Tensor的维度
Pytorch使用教学3-特殊张量的创建与类型转化
Pytorch使用教学4-张量的索引
Pytorch使用教学5-视图view与reshape的区别
Pytorch使用教学6-张量的分割与合并
Pytorch使用教学7-张量的广播
Pytorch使用教学8-张量的科学运算
Pytorch使用教学9-张量的线性代数运算
Pytorch使用教学10-张量操作方法大总结
在这里插入图片描述

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

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

相关文章

common-intellisense:助力TinyVue 组件书写体验更丝滑

本文由体验技术团队Kagol原创~ 前两天,common-intellisense 开源项目的作者 Simon-He95 在 VueConf 2024 群里发了一个重磅消息: common-intellisense 支持 TinyVue 组件库啦! common-intellisense 插件能够提供超级强大的智能提示功能&…

Ubuntu升级软件或系统

Ubuntu升级软件或系统 升级Ubuntu系统通常是一个相对简单的过程,但在进行操作之前,请务必备份重要数据以防万一。下面是升级Ubuntu系统的一般步骤: 使用软件更新工具升级系统 打开终端: 按下 Ctrl Alt T 组合键打开终端。 更…

Java设计模式—单例模式(Singleton Pattern)

目录 一、定义 二、应用场景 三、具体实现 示例一 示例二 四、懒汉与饿汉 饿汉模式 懒汉模式 五、总结 六、说明 一、定义 二、应用场景 ‌单例模式的应用场景主要包括以下几个方面: ‌日志系统:在应用程序中,通常只需要一个日…

【JS逆向课件:第十三课:异步爬虫】

回顾 并行和并发 表示程序/计算机具有处理多个任务的能力 并行表示可以同时处理多个任务(几个多核CPU)并发无法同时处理多个任务,但是可以基于时间片轮转法在多任务间快速切换的执行任务。 同步和异步 在基于并行或者并发处理任务的时候&am…

链式法则和自动求导

向量链式法则 说明: 1.第一个式子, y是标量,u是标量,x是n维向量 2.第二个式子,y是标量,u是k维向量,x是n维向量,所以y对u求导是k维的行向量,u对x求导是k行n列的矩阵&…

学术研讨 | 区块链治理与应用创新研讨会顺利召开

学术研讨 近日,国家区块链技术创新中心组织,长安链开源社区支持的“区块链治理与应用创新研讨会”顺利召开,会议围绕区块链治理全球发展现状、研究基础、发展趋势以及区块链行业应用创新展开研讨。北京大学陈钟教授做了“区块链治理与应用创…

消息队列的面试题

目录 面试题消息队列的使用场景场景描述与数据数据流程与具体数据优势与数据支持流量控制的举例场景:在线视频平台的直播流传输场景描述流量控制策略数据与效果 面试题 为什么使用消息队列? 消息队列有什么优点和缺点? Kafka、ActiveMQ、Rab…

opencv:基于阈值的分割方法(固定阈值和自适应阈值)

1、基于阈值的分割 (1)固定阈值分割 将图像分为两个部分:黑和白两个区域 /*author 还下着雨ZG * brief 固定阈值图像分割 * param[in] imSrc, 待分割的图像 * param[out] imSegment, 分割后的图像 * param[in] threVal, 输入的阈值 * return, 返回正整数表示图像…

Ubuntu设置时区

Ubuntu设置时区 在 Ubuntu 中设置时区可以通过以下几个步骤来完成: 方法一:使用命令行 查看当前时区设置: 可以使用以下命令查看当前系统的时区设置: timedatectl如果你想要详细信息,可以运行: timedatec…

ESP32-S3-DevKitC-1开发记录帖——与MPU6050进行姿态检测

目录 MPU6050传感器——姿态检测 1.姿态检测 1.1 基本认识 1)坐标系 2)姿态角的关系 3)陀螺仪检测的缺陷 4)利用加速度计检测角度 5)利用磁场检测角度 1.2 姿态融合与四元数 1.3传感器工作原理 1.4 MPU6050模…

【PyTorch】图像多分类项目

【PyTorch】图像二分类项目 【PyTorch】图像二分类项目-部署 【PyTorch】图像多分类项目 【PyTorch】图像多分类项目部署 多类图像分类的目标是为一组固定类别中的图像分配标签。 目录 加载和处理数据 搭建模型 定义损失函数 定义优化器 训练和迁移学习 用随机权重进行训…

新电脑如何设置 npm 源及查看源、安装 cnpm、pnpm 和 yarn 的详细教程

当你获得一台新电脑,或需要在现有电脑上优化 JavaScript 和 Node.js 的开发环境时,正确配置 npm 是一步不可少的过程。本教程将详细指导你如何设置 npm 源,查看当前源,以及如何安装 cnpm、pnpm 和 yarn。 1. 设置 npm 源 npm (N…

one-api 源码调试配置

本文主要介绍通过 VSCode 调试 one-api 源码。 一、环境配置 1.1 VSCode 和 one-api 安装 首先,确保已经安装了 VSCode(下载链接)和 one-api 源码(下载链接)已下载并安装了依赖 1.2 安装 Go 插件 在 VSCode 中,安装 Go 插件。 1.3 安装 dlv 调试包 可以通过下载源码…

【黑马java基础】多线程

什么是线程? 线程(Thread)是一个程序内部的一条执行流程。 这个是一条执行流程,虽然有循环,但是最后只有一条流程往前推进,所以视为一条。 程序中如果只有一条执行流程,那这个程序就是单线程的程序。 程序是指令序列…

Ubuntu20.04安装Elasticsearch

简介 ELK(Elasticsearch, Logstash, Kibana)是一套开源的日志管理和分析工具,用于收集、存储、分析和可视化日志数据。以下是如何在Ubuntu服务器上安装和配置ELK堆栈以便发送和分析日志信息的步骤。 安装Elasticsearch 首先,安…

vue3——利用自定义指令实现下拉框分页懒加载

需求:下拉框一开始请求第一页的内容,滚动到最后的时候,请求第二页的内容,如此反复,直到所有数据加载完成。 selectLoadMore.ts //自定义指令:实现下拉框下拉到末尾时,加载下一页的内容 // 使用…

【系统架构设计师】十八、架构设计实践(信息系统架构设计理论与实践2)

目录 四、企业信息系统的总体框架 4.1 战略系统 4.2 业务系统 4.3 应用系统 4.4 企业信息基础设施 4.5 业务流程重组BPR 4.6 业务流程管理BPM 五、信息系统架构设计方法 5.1 行业标准的体系架构框架 5.2 架构开发方法 5.3 信息化总体架构方法 5.4 信息化建设生命周…

防火墙——网络环境支持

目录 网络环境支持 防火墙的组网 web连接上防火墙 web管理口 让防火墙接到网络环境中 ​编辑 管理员用户管理 缺省管理员 接口 配置一个普通接口 创建安全区域 路由模式 透明模式 混合模式 防火墙的安全策略 防火墙转发流程 与传统包过滤的区别 创建安全策略 …

DDoS攻击:威胁与防护策略

DDoS(分布式拒绝服务)攻击是网络安全领域的一大挑战,对企业造成严重的影响。本文将深入探讨DDoS攻击的原理和防护方法。 DDoS攻击的原理 DDoS攻击通过大量请求,使目标系统无法响应正常请求。攻击者利用多台计算机发送大量请求&am…

气膜羽毛球馆的维护和运营成本解析—轻空间

随着人们对健康生活方式的追求不断增加,羽毛球这项运动也愈发受到欢迎。然而,传统的羽毛球馆往往存在建设周期长、成本高、维护复杂等问题。气膜羽毛球馆作为一种新型的运动场馆解决方案,因其快速搭建、环保节能、舒适环境等优势而逐渐被广泛…