浅析pytorch中的常见函数和方法

一、背景

        pytorch是深度学习的重要建模工具,也几乎是人工智能工程师必须掌握的一大法宝。在建模的过程中,pytorch提供了很多高效的函数以及方法便于我们对数据、模型进行处理。为了避免重复造轮子,我们来盘点下pytorch常用的函数及方法。

二、常见函数及方法

1、张量操作

  • torch.tensor(data):创建一个新的张量。
  • tensor.numpy():将PyTorch张量转换为NumPy数组。
  • tensor.detach():返回一个新的张量,与当前计算图断开连接,不会在梯度传播中跟踪。例如,在模型评估阶段,我们需要对模型的输出进行一些操作,但不希望这些操作影响模型的梯度时,使用detach()可以确保评估过程中的计算不会影响训练过程。此外,当我们需要将张量从一个设备(如GPU)移动到另一个设备(如CPU)时,detach()可以避免不必要的梯度计算。
import torch# 创建一个需要梯度的张量
x = torch.randn(2, 2, requires_grad=True)
# 执行一些操作
y = x * x
# 将y从计算图中分离
z = y.detach()
z.requires_grad_()
# 对z进行操作不会影响x的梯度
z.sum().backward()  # 这不会在x上产生梯度
# 检查x的梯度
print(x.grad)  # None,因为没有对x进行需要梯度的计算
  • tensor.requires_grad_():设置张量,使其在计算图中跟踪梯度。
import torch# 创建一个张量,默认不跟踪梯度
x = torch.randn(2, 2)
print(x.requires_grad)  # 输出: False# 开启梯度跟踪
x.requires_grad_()  # 现在x将跟踪梯度
print(x.requires_grad)  # 输出: True
  • tensor.grad:获取或设置张量的梯度。
  • torch.no_grad():上下文管理器,用于禁用梯度计算,一般用在模型评估等不需要反向传播的环节。
with torch.no_grad():outputs = model(inputs)
  • torch.randn(*sizes):生成一个形状为sizes的张量,填充随机值来自标准正态分布。
  • torch.zeros(*sizes):生成一个形状为sizes的张量,填充值为0。
  • torch.ones(*sizes):生成一个形状为sizes的张量,填充值为1。
  • torch.cat(tensors, dim):沿指定维度dim连接张量序列。
import torch# 创建两个二维张量
tensor1 = torch.tensor([[1, 2], [3, 4]])
tensor2 = torch.tensor([[5, 6], [7, 8]])# 沿维度0连接张量
result = torch.cat((tensor1, tensor2), dim=0)
print(result)
  • torch.stack(tensors, dim):沿新维度dim堆叠张量序列。
import torch# 创建两个张量
tensor1 = torch.tensor([[1, 2], [3, 4]])
tensor2 = torch.tensor([[5, 6], [7, 8]])# 沿新的维度堆叠张量
stacked_tensor = torch.stack((tensor1, tensor2), dim=0)
print(stacked_tensor)
  • torch.squeeze(tensor, dim):去除张量中大小为1的维度。
import torch# 创建一个张量,其中包含大小为1的维度
tensor = torch.tensor([[[1], [2]]])# 去除所有大小为1的维度
squeezed_tensor = torch.squeeze(tensor)
print(squeezed_tensor)
  • torch.unsqueeze(tensor, dim):在指定维度dim插入大小为1的维度。
import torch# 创建一个向量
tensor = torch.tensor([1, 2])# 在第1维插入大小为1的维度
unsqueezed_tensor = torch.unsqueeze(tensor, dim=1)
print(unsqueezed_tensor)

2、数字和聚合操作

  • torch.sum(tensor, dim):沿指定维度dim计算张量的和。
import torch# 创建一个张量
tensor = torch.tensor([[1, 2], [3, 4]])# 计算所有元素的和
sum_all = torch.sum(tensor)
# 计算每一列的和
sum_columns = torch.sum(tensor, dim=0)
print("Sum of all elements:", sum_all)
print("Sum of each column:", sum_columns)
  • torch.mean(tensor, dim):沿指定维度dim计算张量的平均值。
import torch# 创建一个张量
tensor = torch.tensor([[1, 2], [3, 4]], dtype=torch.float)# 计算所有元素的平均值
mean_all = torch.mean(tensor)
# 计算每一列的平均值
mean_columns = torch.mean(tensor, dim=0)
print("Mean of all elements:", mean_all)
print("Mean of each column:", mean_columns)
  • torch.min(tensor, dim):沿指定维度dim找到张量的最小值。
import torch# 创建一个张量
tensor = torch.tensor([[1, 3], [2, 0]])# 计算所有元素中的最小值
min_all = torch.min(tensor)# 计算每一列的最小值
min_columns = torch.min(tensor, dim=0)[0]  # Returns a tuple, so we take the first elementprint("Min of all elements:", min_all)
print("Min of each column:", min_columns)
  • torch.max(tensor, dim):沿指定维度dim找到张量的最大值。
import torch# 创建一个张量
tensor = torch.tensor([[1, 3], [2, 0]])# 计算所有元素中的最大值
max_all = torch.max(tensor)
# 计算每一列的最大值
max_columns = torch.max(tensor, dim=0)[0]  # Returns a tuple, so we take the first element
print("Max of all elements:", max_all)
print("Max of each column:", max_columns)
  • torch.argmax(tensor, dim):沿指定维度dim找到张量最大值的索引。
import torch# 创建一个张量
tensor = torch.tensor([[1, 3], [2, 0]])# 计算每一列最大值的索引
argmax_columns = torch.argmax(tensor, dim=0)print("Argmax of each column:", argmax_columns)
  • torch.exp(tensor):计算张量中每个元素的指数。
import torch# 创建一个张量
tensor = torch.tensor([0.0, 1.0, 2.0])# 计算每个元素的指数
exp_tensor = torch.exp(tensor)print("Exponential of tensor:", exp_tensor)
  • torch.log(tensor):计算张量中每个元素的自然对数。
import torch# 创建一个张量
tensor = torch.tensor([1.0, 2.0, 3.0])# 计算每个元素的自然对数
log_tensor = torch.log(tensor)print("Natural logarithm of tensor:", log_tensor)

3、张量计算

  • torch.matmul(tensor1, tensor2):计算两个张量的矩阵乘积。
import torch# 创建两个2x2矩阵
matrix1 = torch.tensor([[1, 2], [3, 4]])
matrix2 = torch.tensor([[5, 6], [7, 8]])# 计算矩阵乘积
result = torch.matmul(matrix1, matrix2)print("Matrix multiplication result:\n", result)
  • torch.inverse(tensor):计算方阵张量的逆。
import torch# 创建一个2x2方阵
matrix = torch.tensor([[1, 2], [3, 4]], dtype=torch.float)# 计算矩阵的逆
# 注意:只有方阵才有逆
inverse_matrix = torch.inverse(matrix)print("Inverse of matrix:\n", inverse_matrix)
  • torch.norm(tensor, p):计算张量的Lp范数。
import torch# 创建一个向量
vector = torch.tensor([3, 4], dtype=torch.float)# 计算L1范数(绝对值之和)
norm_l1 = torch.norm(vector, p=1)# 计算L2范数(欧几里得距离)
norm_l2 = torch.norm(vector, p=2)print("L1 norm of vector:", norm_l1)
print("L2 norm of vector:", norm_l2)

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

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

相关文章

【C语言】。末尼

用js写一个冒泡排序 当然可以。在JavaScript中&#xff0c;你可以使用递归的方式来实现冒泡排序算法。这是一个简单的示例&#xff1a; function bubbleSort(arr) { let len arr.length; if(len < 1){ return arr; // 如果数组只有一个元素或为空&#xf…

深度学习笔记12

1.神经网络的代价函数 神经网络可同时用于解决分类问题和回归问题&#xff0c;对于不同的问题会在输出层后&#xff0c;加上不同的变换函数。一般来说&#xff0c;回归问题使用恒等函数,分类问题使用sigmoid或softmax函数。而不同的变换函数&#xff0c;也对应不同的代价函数。…

RabbitMQ队列详细属性(重要)

RabbitMQ队列详细属性 1、队列的属性介绍1.1、Type&#xff1a;队列类型1.2、Name&#xff1a;队列名称1.3、Durability&#xff1a;声明队列是否持久化1.4、Auto delete&#xff1a; 是否自动删除1.5、Exclusive&#xff1a;1.6、Arguments&#xff1a;队列的其他属性&#xf…

json即json5新特性,idea使用json5,fastjson、gson、jackson对json5支持

文章目录 1.新特性1.1.JSON&#xff06;JSON5官网2.示例2.1. IntelliJ IDEA2.1.1.支持.json5文件2.1.2.md支持json5代码块 2.9. 示例源码 1.新特性 【通用】 注释尾随逗号key无需引号&#xff08;或单引号&#xff09; 【字符串】 字符串可以用单引号引起来。字符串可以通过转…

【NOIP普及组】摆花

【NOIP普及组】摆花 C语言代码C 代码Java代码Python代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 小明的花店新开张&#xff0c;为了吸引顾客&#xff0c;他想在花店的门口摆上一排花&#xff0c;共 m 盆。通过调 查顾客的喜好&am…

pdf转excel;pdf中表格提取

一、问题描述 在工作中或多或少会遇到&#xff1a;需要将某份pdf中的表格数据提取出来&#xff0c;以便能够“修改使用”数据 可将pdf中的表格提取出来&#xff0c;解决办法还有点复杂 尤其涉及“pdf中表格不是标准的单元格”的时候&#xff0c;提取数据到excel不太容易 比…

Qt中 QWidget 和 QMainWindow 区别

QWidget 用来构建简单窗口 QMainWindow 用来构建更复杂的窗口&#xff0c;QMainWindow 继承自QWidget&#xff0c;在QWidget 的基础上提供了菜单栏、工具栏、状态栏等功能 菜单栏&#xff08;QMenuBar&#xff09;工具栏&#xff08;QToolBar&#xff09;状态栏&#xff08;Q…

《深入浅出Apache Spark》系列③:Spark SQL解析层优化策略与案例解析

导读&#xff1a;本系列是Spark系列分享的第三期。第一期分享了Spark Core的一些基本原理和一些基本概念&#xff0c;包括一些核心组件。Spark的所有组件都围绕Spark Core来运转&#xff0c;其中最活跃的一个上层组件是Spark SQL。第二期分享则专门介绍了Spark SQL的基本架构和…

安全的时钟启动

Note&#xff1a;文章内容以 Xilinx 系列 FPGA 进行讲解 1、什么是安全启动时钟 通常情况下&#xff0c;在MMCM/PLL的LOCKED信号抬高之后&#xff08;由0变为1&#xff09;&#xff0c;MMCM/PLL就处于锁定状态&#xff0c;输出时钟已保持稳定。但在此之前&#xff0c;输出时钟会…

【mongodb】数据库的安装及连接初始化简明手册

NoSQL(NoSQL Not Only SQL )&#xff0c;意即"不仅仅是SQL"。 在现代的计算系统上每天网络上都会产生庞大的数据量。这些数据有很大一部分是由关系数据库管理系统&#xff08;RDBMS&#xff09;来处理。 通过应用实践证明&#xff0c;关系模型是非常适合于客户服务器…

丹韵红墙成红毯至美背景!冠珠华脉「雍华京韵」于M essential大秀绽放京韵时尚

东方美学代表品牌M essential近日于上海科学会堂举办十周年大秀&#xff0c;并发布品牌全新2024/25冬春系列。冠珠瓷砖作为国风新韵合作品牌&#xff0c;以高定岩板华脉「雍华京韵」系列的宫墙丹韵打造红毯背景墙&#xff0c;中国高定岩板与中国高级时装作品碰撞着“中国美”的…

工程认证与Spring Boot:计算机课程管理的新探索

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了基于工程教育认证的计算机课程管理平台的开发全过程。通过分析基于工程教育认证的计算机课程管理平台管理的不足&#xff0c;创建了一个计算机管理基于工程教育认…

excel功能

统计excel中每个名字出现的次数 在Excel中统计每个名字出现的次数&#xff0c;您可以使用COUNTIF函数或数据透视表。以下是两种方法的详细步骤&#xff1a; 方法一&#xff1a;使用COUNTIF函数 准备数据&#xff1a;确保您的姓名列表位于一个连续的单元格区域&#xff0c;例如…

【flask开启进程,前端内容图片化并转pdf-会议签到补充】

flask开启进程,前端内容图片化并转pdf-会议签到补充 flask及flask-socketio开启threading页面内容转图片转pdf流程前端主js代码内容转图片-browser端browser端的同步编程flask的主要功能route,def 总结 用到了pdf,来回数据转发和合成,担心flask卡顿,响应差,于是刚好看到threadi…

聊一聊Spring中的自定义监听器

前言 通过一个简单的自定义的监听器&#xff0c;从源码的角度分一下Spring中监听的整个过程&#xff0c;分析监听的作用。 一、自定义监听案例 1.1定义事件 package com.lazy.snail;import lombok.Getter; import org.springframework.context.ApplicationEvent;/*** Class…

VMWareTools安装及文件无法拖拽解决方案

文章目录 1 安装VMWare Tools2 安装vmware tools之后还是无法拖拽文件解决方案2.1 确认vmware tools安装2.2 客户机隔离2.3 修改自定义配置文件2.4 安装open-vm-tools-desktop软件 1 安装VMWare Tools 打开虚拟机VMware Workstation&#xff0c;启动Ubuntu系统&#xff0c;菜单…

ADC前端控制与处理模块--AD7606_Module

总体框架 AD7606_Module主要由3个模块组成组成&#xff0c;AD7606_Data_Pkt和AD7606_Drive以及AD7606_ctrl。 1.AD7606_Data_Pkt主要作用是把AD芯片数据组好数据包&#xff0c;然后发送给上位机&#xff1b; 2.AD7606_Drive主要负责和芯片的交互部分 3.AD7606_ctrl控制模块的作…

Unity 插件 - Project窗口资源大小显示

Unity 插件 - Project窗口资源大小显示 &#x1f354;功能&#x1f32d;安装 &#x1f354;功能 &#x1f4a1;.显示Project Assets 和Packages下所有文件的大小&#xff08;右侧显示&#xff09; &#x1f4a1;.统计选中文件夹及其子文件夹下所有文件的大小并显示&#xff08…

HTB:Photobomb[WriteUP]

目录 连接至HTB服务器并启动靶机 使用nmap对靶机进行端口开放扫描 再次使用nmap对靶机开放端口进行脚本、服务扫描 使用ffuf进行简单的子域名扫描 使用浏览器直接访问该域名 选取一个照片进行下载&#xff0c;使用Yakit进行抓包 USER_FLAG&#xff1a;a9afd9220ae2b5731…

ssm教室信息管理系统+vue

系统包含&#xff1a;源码论文 所用技术&#xff1a;SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习&#xff0c;获取源码看文章最下面 需要定制看文章最下面 目 录 目 录 III 1 绪论 1 1.1 研究背景 1 1.2目的和意义 1 1.3 论文结构安排 2 2 相关技术 3 …