当前位置: 首页 > news >正文

PyTorch 中 12 种张量操作详解

创作不易,还请各位同学三连点赞!!收藏!!转发!!!

对于刚入门学习Python还找不到方向的小伙伴可以试试我的这份学习方法和籽料,免费自取!!

PyTorch 是一个强大的深度学习框架,它允许开发者轻松地定义和训练神经网络。张量是 PyTorch 的核心数据结构,类似于 NumPy 数组,但支持自动微分以及在 GPU 上加速计算。本文将详细介绍 PyTorch 中常用的 12 种张量操作,帮助你更好地理解和使用这个工具。

1. 创建张量

首先,我们需要安装 PyTorch 并导入必要的库。

# 安装 PyTorch  
!pip install torch  # 导入 PyTorch 库  
import torch  

创建张量是最基本的操作之一。你可以从 Python 列表或 NumPy 数组中创建张量。

# 从列表创建张量  
tensor_from_list = torch.tensor([1, 2, 3])  
print(tensor_from_list)  # 输出: tensor([1, 2, 3])  # 从 NumPy 数组创建张量  
import numpy as np  
numpy_array = np.array([1, 2, 3])  
tensor_from_numpy = torch.from_numpy(numpy_array)  
print(tensor_from_numpy)  # 输出: tensor([1, 2, 3])  

2. 查看张量形状

了解张量的形状对于处理数据非常重要。

# 创建一个 2x3 的矩阵  
matrix = torch.tensor([[1, 2, 3], [4, 5, 6]])  
print(matrix.shape)  # 输出: torch.Size([2, 3])  

3. 转置张量

转置可以改变张量的维度顺序。

# 创建一个 2x3 的矩阵  
matrix = torch.tensor([[1, 2, 3], [4, 5, 6]])  
transposed_matrix = matrix.t()  
print(transposed_matrix)  # 输出:  
# tensor([[1, 4],  
#         [2, 5],  
#         [3, 6]])  

4. 拆分张量

拆分张量可以帮助你在不同维度上分割数据。

# 创建一个 3x4 的矩阵  
matrix = torch.tensor([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])  
split_tensors = torch.split(matrix, split_size=2, dim=1)  
for t in split_tensors:  print(t)  
# 输出:  
# tensor([[ 1,  2],  
#         [ 5,  6],  
#         [ 9, 10]])  
# tensor([[ 3,  4],  
#         [ 7,  8],  
#         [11, 12]])  

5. 拼接张量

拼接操作可以将多个张量合并成一个更大的张量。

# 创建两个 2x2 的矩阵  
matrix1 = torch.tensor([[1, 2], [3, 4]])  
matrix2 = torch.tensor([[5, 6], [7, 8]])  
concatenated_tensor = torch.cat((matrix1, matrix2), dim=0)  
print(concatenated_tensor)  # 输出:  
# tensor([[1, 2],  
#         [3, 4],  
#         [5, 6],  
#         [7, 8]])  

6. 张量索引

索引操作允许你选择张量中的特定元素或子集。

# 创建一个 2x3 的矩阵  
matrix = torch.tensor([[1, 2, 3], [4, 5, 6]])  
element = matrix[0, 1]  
print(element)  # 输出: tensor(2)  sub_matrix = matrix[1, :]  
print(sub_matrix)  # 输出: tensor([4, 5, 6])  

7. 张量切片

切片可以让你选择张量的一部分。

# 创建一个 2x3 的矩阵  
matrix = torch.tensor([[1, 2, 3], [4, 5, 6]])  
slice_tensor = matrix[:, 1:]  
print(slice_tensor)  # 输出:  
# tensor([[2, 3],  
#         [5, 6]])  

8. 张量广播

广播是一种机制,允许你执行不同形状的张量之间的操作。

# 创建一个 1x3 的向量和一个标量  
vector = torch.tensor([1, 2, 3])  
scalar = torch.tensor(2)  # 将向量乘以标量  
broadcasted_tensor = vector * scalar  
print(broadcasted_tensor)  # 输出: tensor([2, 4, 6])  

9. 张量相加

相加操作用于将两个张量对应位置的元素相加。

# 创建两个 2x2 的矩阵  
matrix1 = torch.tensor([[1, 2], [3, 4]])  
matrix2 = torch.tensor([[5, 6], [7, 8]])  # 相加  
sum_tensor = matrix1 + matrix2  
print(sum_tensor)  # 输出:  
# tensor([[ 6,  8],  
#         [10, 12]])  

10. 张量乘法

乘法操作可以用于点积或矩阵乘法。

# 创建两个 2x2 的矩阵  
matrix1 = torch.tensor([[1, 2], [3, 4]])  
matrix2 = torch.tensor([[5, 6], [7, 8]])  # 点积  
dot_product = torch.dot(matrix1.view(-1), matrix2.view(-1))  
print(dot_product)  # 输出: tensor(70)  # 矩阵乘法  
matrix_product = torch.matmul(matrix1, matrix2)  
print(matrix_product)  # 输出:  
# tensor([[19, 22],  
#         [43, 50]])  

11. 张量归一化

归一化可以将张量的值调整到特定范围内。

# 创建一个 1x3 的向量  
vector = torch.tensor([1, 2, 3])  # 归一化  
normalized_vector = torch.nn.functional.normalize(vector, p=2, dim=0)  
print(normalized_vector)  # 输出: tensor([0.2673, 0.5345, 0.8018])  

12. 张量随机初始化

随机初始化在神经网络训练中非常重要。

# 随机初始化一个 2x3 的矩阵  
random_matrix = torch.randn(2, 3)  
print(random_matrix)  # 输出类似:  
# tensor([[ 1.0431, -0.1827, -0.2591],  
#         [-0.2442, -0.3353,  0.4927]])  

总结

本文详细介绍了 PyTorch 中常用的 12 种张量操作,包括创建张量、查看张量形状、转置张量、拆分张量、拼接张量、张量索引、张量切片、张量广播、张量相加、张量乘法、张量归一化和张量随机初始化。这些操作是使用 PyTorch 进行深度学习的基础,掌握它们将有助于你更高效地开发和训练神经网络模型。

相关文章:

PyTorch 中 12 种张量操作详解

创作不易,还请各位同学三连点赞!!收藏!!转发!!! 对于刚入门学习Python还找不到方向的小伙伴可以试试我的这份学习方法和籽料,免费自取!! PyTorc…...

雷池WAF自动化实现安全运营实操案例终极篇

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…...

微信小程序实现canvas电子签名

一、先看效果 小程序canvas电子签名 二、文档 微信小程序canvas 组件文档 微信小程序canvas API文档 H5Canvas文档 三、分析 1、初始话Canvas容器 2、Canvas触摸事件,bindtouchstart(手指触摸动作开始)、bindtouchmove(手指触摸…...

【SpringCloud】Seata微服务事务

Seata微服务事务 分布式事务问题:本地事务分布式事务演示分布式事务问题:示例1 分布式事务理论CAP定理一致性可用性分区容错矛盾 Base理论解决分布式事务的思路 初识SeataSeata的架构部署TC服务微服务集成Seata引入依赖配置TC地址 其他服务 动手实践XA模…...

重新阅读《马说》,感悟“伯乐相马”背后的被选择与选择的大智慧

“初闻不识曲中意,再听已是曲终人”。世有伯乐,然后有千里马。千里马常有,而伯乐不常有。无论你是考研考公等考试大军中的一员,还是已步入社会的打工人或者领导,当你面临被人选择或者选择人时,皆可从《马说…...

深入拆解TomcatJetty(三)

深入拆解Tomcat&Jetty(三) 专栏地址:https://time.geekbang.org/column/intro/100027701 1 Tomcat组件生命周期 Tomcat如何如何实现一键式启停 Tomcat 架构图和请求处理流程如图所示: 对组件之间的关系进行分析,…...

MySQL 实现简单的性能优化

一:硬件优化 更高的网络带宽:在处理大规模的远程请求时可以提高MySQL服务器的响应速度; 更大的内存空间:有助于缓存更多的数据库数据,减少磁盘I/O操作,提高整体性能; 换用企业级SSD&#xff1…...

AB包资源管理器

简介 ABMgr(Asset Bundle Manager)类是一个用于管理 Unity 中 AssetBundle 资源加载的管理器。它通过字典缓存和管理加载的 AB 包,同时支持同步和异步加载。还包含了卸载和清理 AB 包的方法。 功能解析: 主包加载与依赖管理&…...

Centos7源报错问题

原因:是因为centos7在024年6月份停止维护,导致默认镜像不能使用,更改镜像即可mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/…...

Openlayers高级交互(2/20):清除所有图层的有效方法

Openlayers项目中,经常会放置很多的图层,在业务操作的时候,会做出删除所有图层的行为。这里面给出了一个详细的方法,能够有效的解决 清除所有图层的问题。 效果图 专栏名称内容介绍Openlayers基础实战 (72篇&#xff…...

黑马JavaWeb-day02

什么是JavaScript? JavaScript:简称Js,是一门跨平台、面向对象的脚本语言。是用来控制网页行为的,它能使网页可交互 JavaScript和Java是完全不同的语言,无论是概念还是设计。但是基础语法类似。 JavaScript JavaScript引入方式…...

laravel清除不同缓存

1、清除应用程序缓存: php artisan cache:clear2、清除路由缓存: php artisan route:cache3、清除配置缓存: php artisan config:cache4、清除编译后的视图文件: php artisan view:clear5、清除事件和监听器缓存: ph…...

【Git】解决分支冲突、分支合并、版本回退、版本管理

解决本地冲突 1. 合并分支 假设你正在 main 分支上,想要合并 feature 分支。 git checkout main git merge feature如果两个分支都对同一文件做了不同的修改,Git 会提示你有冲突,并显示冲突文件。 2. 查看冲突文件 使用以下命令查看冲突…...

linux file结构体与inode结构体

在 Linux 系统中,inode 结构体和 file 结构体都是与文件系统相关的重要数据结构。它们各自承担着不同的角色,帮助操作系统管理文件和目录。以下是它们的异同点: inode 结构体 1.定义:inode(索引节点)是文件…...

探索迷宫的奥秘:用 C++ 打造你的迷宫游戏之旅!

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...

JSON 注入攻击 API

文章目录 JSON 注入攻击 API"注入所有东西"是"聪明的"发生了什么? 什么是 JSON 注入?为什么解析器是问题所在解析不一致 JSON 解析器互操作性中的安全问题处理重复密钥的方式不一致按键碰撞响应不一致JSON 序列化(反序列化)中的不一致 好的。JSON 解析器…...

MyBatis入门程序之客户添加、更新与删除

【图书介绍】《SpringSpring MVCMyBatis从零开始学(视频教学版)(第3版)》-CSDN博客 《SpringSpring MVCMyBatis从零开始学 视频教学版 第3版整合开发实战快速开发与项目实战框架技术精讲与整合案例 计算机与互联网 编程语言与程序…...

查缺补漏----数据结构树高总结

① 对于平衡二叉树而言,树高的规律: 高度为h的平衡二叉树的含有的最少结点数(所有非叶节点的平衡因子均为1): n01,n11,n22 含有的最多结点数: (高度为h的满二叉树含有的结点数) ②…...

jenkins添加新服务

jenkins添加新服务 新建item 添加流水线 node{def envname "ENVIRONMENT:1234-dev"def projectGitUrl http://xxxxx/xxxxxx/12345.gitdef imageServer harbor.xxxxx.com //镜像仓库地址def projectAppName 12345-applicationdef projectGitBranch dev//git分…...

网络连接设备的功能与应用概述

目录 一、集线器 二、交换机 三、网桥 四、路由器 五、集线器、交换机、网桥与路由器的比较 备注 一、集线器 定义: 集线器(Hub)是一种物理层设备,它提供多个端口,用于将多个计算机或其他网络设备连接在一起&am…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...