百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

PyTorch之Tensor的常见运算和操作

liuian 2025-05-08 19:40 15 浏览

上一个小节和大家简单地探讨了我们在日常开发的时候,常见的创建Tensor的几种方式,大家应该还是有些印象的,只需要对着官方文档简单地把代码敲一遍,基本上还是有所收获的,这篇文章也比较简单但又是非常重要的,主要是对Tensor进行一系列操作,例如常见的数学操作,修改Tensor的形状。

首先先简单地介绍一下常见的运算操作,例如例如加法,减法,元素相乘。

其次需要注意的就是矩阵相乘,这块也是在深度学习中非常常见的操作,大家务必需要掌握好。(Attention is all you need),矩阵的乘法是在后续的深度学习中确实是非常常见的操作之一,PyTorch中实现矩阵乘法的API是torch.matmul()方法,矩阵乘法是遵循如下逻辑的:

靠近符号的@的两边内在的矩阵维度必须是相同的,如下图所示:

矩阵相乘的结果的维度是由两个相乘矩阵外侧两边的维度所决定,如下图所示:

我们可以简单看下代码,如下图所示我们手写2个tensor,分别是tensor_A和tensor_B,他们的shape都是3X2。

如果两个tensor直接执行矩阵相乘的操作,则会出现如下的错误,torch会提示错误,显示一个矩阵是3x2,另一个矩阵也是3x2是无法相乘的。所以我们要修改矩阵的形状。

我们通过矩阵的转置操作,将tensor_B的形状转置成2x3,这样的话,矩阵A是3x2,矩阵B是2X3,这样的话两个矩阵内在维度都是2,外在维度都是3,这样就符合矩阵相乘的逻辑了,相乘的结果就是3X3,如下图所示:

介绍完tensor的数学运算后,还需要和大家介绍tensor的一些“变形”操作,这些操作在后续的一些神经网络的搭建,也是非常常见的。例如我们刚才为了做好矩阵的相乘,我们把一个3x2的矩阵通过一种比较常见的转置操作,变成了2x3的矩阵,这样才可以与3x2的矩阵进行矩阵相乘的操作。所以矩阵的“变形”操作是为了更好地方便用户进行操作。

上述表格里面的“reshape”,“view”,“stack”,“squeeze”,“unsqueeze”,“permute”操作在后续的操作中都非常常见,所以作为初学者,在这里不需要了解其中的真实原理或者上下文关系,重要的是在jupyter或者colab中敲一敲,留下一些印象。这样在后续的课程里面遇到一些比较经典的网络模型的时候,能够回头再来理解和咀嚼相关的操作,加深自己对这些操作的理解。

接下来我们就快速地进行简单的练习,并且举一些比较易懂的例子,先留下一些简单的印象。首先先看一下reshape的操作,如下图所示,我们先用arange操作,创建一个tensor,tensor里面的数量是8个,左闭右开,这块我们先回顾一下之前的知识,然后我们使用reshape的操作,将这8个数字变成2行4列,我们可以这样想象一下,来了8个小朋友,把他们领到一个教室里,分成2组,每组4个人,同时不改变它们的顺序。大家可以动手操作一下,相信很快能够理解reshape的作用。view的作用大家可以暂时认为与reshape逻辑一样,先暂时这么使用,等后续遇到实际问题时,再进行分析,否则大家拘泥于细节,不利于大家进一步学习。

接下来我们可以练习第二个操作,stack操作,stack有“堆砌”的意思,这边需要注意的就是堆砌的方向,就像和我们砌墙一样,有按着行来砌,也有竖着按着列来砌墙,都是可以完成的,按照什么方向进行堆砌在PyTorch的stack api中使用dim这个参数来进行控制的,dim=0,表示先按照行来堆砌,dim=1表示按照列来堆砌。

第三个操作就是unsqueeze和squeeze这2个成对的操作,unsequeeze就是扩充维度的,squeeze就是减少维度的意思,这块也是比较常见的操作,比如如下所示,可以x_squeezed看出维度增加了一个维度。就好比现在砌墙,已经用8块砖头砌了2行每行4块砖头的格式,现在用“框子”框住就变成了一面墙,现在的2x4就成了一个“整体”,变成了一面墙,维度就变成了1x2x4,解释成有1面墙,这个墙有2行,每一行有4块砖头,接下来我们再使用repeat的api,进行快速复制。参数是(2,1,1),理解起来也比较方便,就是我们一面墙的这个维度,变成2面墙,每面墙里面的元素不发生改变。

这块还是希望大家去主动手敲相关的代码,这样才会方便大家理解,虽然这块是基础,但是后面在一些经典的网络搭建的时候,这些API还是非常常见的,如果大家掌握不牢,到时候还是需要重头开始看,否则就根本看不懂相关的逻辑。

好了,到目前为止,PyTorch中一些比较常见的tensor操作,我们都已经简单介绍了,还有一些特定领域的API,我们还没有介绍,到时候遇到一个就介绍一个,下一个小节,我们就开始PyTorch的Hello world之旅了,希望对深度学习感兴趣的同学多多支持,点赞和关注,接下来应该会每周2更新,大家一起加油。

相关推荐

结构力学!EI会议图表规范秘籍(ei会议排版)

推荐会议:国际结构与材料工程进展大会(ISME2026)会议编号:EI#73521截稿时间:2026年3月10日召开时间/地点:2026年8月15-17日·德国柏林论文集上线:会后4...

如何在simulink中获取足端轨迹?(simulink怎么设置触发角)

哈喽大家好,我是咕噜美乐蒂。很高兴又和大家见面啦。在机器人控制的应用中,足端轨迹是一个非常重要的参数,可以用来评估机器人的运动性能和精度。在Simulink中获取足端轨迹需要考虑到模型的复杂性、仿...

JCMsuite:旋转对称发射器(旋转式发射)

示例取自Gregersen等人[1]。几何形状为非理想微柱结构:单光子柱发射器(旋转对称)多层膜是在布局文件layout.jcm中由外部形状为梯形的特殊原始多层创建的(见下文)。参数扫描Matlab(...

动态离散周期变换技术突破:无ECG参考的生理信号精准解析

来源:电子产品世界摘要本文介绍了新型滑动离散周期变换(DPT)算法,可设计用于处理生理信号,尤其是脉搏血氧仪采集的光电容积脉搏波(PPG)信号。该算法采用正弦基函数进行周期域分析,可解决随机噪声和非平...

电气EI源刊避坑指南速存(电气工程开源期刊)

期刊推荐:《IEEETransactionsonPowerSystems》刊号:ISSN0885-8950影响因子:8.5(最新JCR数据)分区:中科院1区|JCRQ1版面费:约2200美...

Matlab基础入门手册(第五章:脚本/函数)

第五章脚本和函数1.44循环和条件语句1.循环语句和条件语句的用法2.说明循环语句:for,while条件语句:if,switch3.实例演示%1_44forx=1:5%简单for程序实例...

利用GPT4-V及Langchain实现多模态RAG

多模态RAG将是2024年AI应用架构发展的一个重要趋势,在前面的一篇文章里提到llama-index在这方面的尝试《利用GPT4-V及llama-index构建多模态RAG应用》,本文[1]中将以另...

WPF基础之UI布局(wpf ui界面设计)

知识点:WPF中的布局控件主要有以下几种:StackPanel:栈面板,可以将元素排列成一行或者一列。其特点是:每个元素各占一行或者一列。WrapPanel:环绕面板,将各个控件从左至右按照行或列的顺...

27.WPF 形状(wps 形状)

摘要  在WPF用户界面中,绘制2D图形内容的最简单方法是使用形状(shape)——专门用于表示简单的直线、椭圆、矩形以及多变形的一些类。从技术角度看,形状就是所谓的绘图图元(primitive)。可...

WPF与WinForm的本质区别(wpf和winui)

在Windows应用程序开发中,WinForm和WPF是两种主要的技术框架。它们各自有不同的设计理念、渲染机制和开发模式。本文将详细探讨WPF与WinForm的本质区别,并通过示例进行说明。渲染机制W...

.NET跨平台绘图基础库--SkiaSharp

SkiaSharp是一个跨平台的2D图形API,用于.NET平台,基于Google的Skia图形库。它提供了全面的2DAPI,可以在移动、服务器和桌面模型上渲染图像。SkiaS...

django python数据中心、客户、机柜、设备资源管理平台源码分享

先转发后关注,私信“资源”即可免费获取源码下载链接!本项目一个开源的倾向于数据中心运营商而开发的,拥有数据中心、客户、机柜、设备、跳线、物品、测试、文档等一些列模块的资源管理平台,解决各类资源集中管理...

在树莓派上:安装Ubuntu Server 20.04

什么是树莓派树莓派是英国树莓派基金会(https://www.raspberrypi.org)开发的卡片式电脑,采用高通的BCM2711ARM64处理器,可用于机器人、物联网、边缘计算、通用计算等多...

手把手教你搭建深度学习环境Pytorch版-Ubuntu

引言很多搞人工智能的小伙伴,刚开始学习,往往摸不着头脑怎么跑代码。跑代码的前提是要有个环境。本篇结合自己的亲身经历,带你搭建环境。相关知识Ubuntu是Linux系统的一种显卡驱动和cuda是两个不同...

干货,Python竟然可以用Kivy编写和打包安卓APP

请大家多多点赞,关注和分享在上一篇文章中,我们介绍了在Python中使用BeeWare框架编写图形程序并将其打包为安卓的apk文件程序。爆强!直接把Python编写的图形程序打包为安卓A...