torch框架学习过程遇到问题

PyTorch框架

  • 一些用法
    • 下划线后缀
    • torch.nn.conv2d和torch.nn.functional.conv2d的区别
  • 函数
    • torch.函数名
    • scatter函数
  • 其他
  • 模型的不同模式:train,eval,infer
    • 读取和保存tensor

一些用法

下划线后缀

在 PyTorch 中,使用下划线后缀的函数通常表示就地修改(inplace)操作。就地修改操作会直接修改原始的张量对象,而不返回新的张量。这在处理大型数据时可以节省内存和计算资源。

例如,scatter_() 是一个就地修改操作,用于散布(scatter)操作。它会直接修改原始的目标张量,而不会返回一个新的张量。类似地,add_()、mul_()、div_() 等函数也是就地修改操作,用于原位加法、原位乘法、原位除法等。

然而,并不是所有的函数都有下划线后缀。许多函数仅返回新的张量而不对原始张量进行修改。例如,add()、mul()、div()、scatter() 等函数都是不可变操作,它们会创建并返回一个新的张量对象。

需要注意的是,并非所有的函数都有就地修改的版本。有些函数只有不可变操作的版本,而没有对应的就地修改版本。

因此,当需要就地修改张量时,可以寻找具有下划线后缀的相应函数。但并不是所有的函数都有这种后缀。在使用函数时,需要查看函数的文档或参考官方文档以确定是否存在就地修改的版本。

torch.nn.conv2d和torch.nn.functional.conv2d的区别

我们会发现在 torch.nn.xxx 和 torch.nn.functional.xxx 中有一些功能重复的操作,比如卷积、激活、池化。这些操作有什么不同?各有什么用处?

nn.Module 实现的 layer 是由 class Layer(nn.Module) 定义的特殊类
nn.functional 中的函数更像是纯函数,由 def function(input) 定义

详解

chat给的解释

在 PyTorch 中,torch.nn 和 torch.nn.functional 提供了一些重复的操作,比如卷积、激活和池化等。这些操作的区别主要集中在使用方式和功能上,以下是它们的主要区别和用途:

1.使用方式:torch.nn 中的操作是通过创建相应的层对象来实现的,它们是 torch.nn.Module 的子类,需要实例化并作为对象使用。而 torch.nn.functional 中的操作是直接调用函数的方式,没有层对象的概念,可以直接传入输入和参数进行计算。

2.计算图记录:torch.nn 的操作会自动跟踪计算图,并记录层对象和参数的信息,以便进行自动求导和梯度计算。而 torch.nn.functional 的操作不会记录计算图,无法进行自动求导,只能手动计算梯度。

3.灵活性:torch.nn.functional 提供了更灵活的编程方式,函数的输入和参数可以更加灵活地指定和调整。它适用于那些需要根据输入动态调整参数的情况。而 torch.nn 中的操作在实例化层对象时,需要将参数固定下来,限制了灵活性,适用于那些参数固定的情况。

4.可重用性:torch.nn 中的层对象是可重用的,可以在不同的模型中多次使用。这样可以方便地构建复杂的模型结构。torch.nn.functional 的函数是**没有状态的,不保存任何参数,每次调用时都需要指定参数的值。**因此,它们不具有可重用性,不能在多个地方共享使用。

综上所述,torch.nn 和 torch.nn.functional 提供了不同的编程方式和功能,可以根据具体的需求选择合适的方式。如果需要跟踪计算图、进行自动求导以及构建可重用的模型结构,建议使用 torch.nn 中的操作。如果需要更灵活的编程方式和增加代码的可读性,或在不需要计算图和自动求导的环境下进行操作,可以使用 torch.nn.functional 中的函数。

函数

torch.函数名

PyTorch框架提供了许多实用的函数,可以通过torch.函数名的方式进行调用。以下是一些常用的torch.函数:

1.torch.max: 计算张量在指定维度上的最大值或返回两个张量中每个位置上的最大值。
2.torch.min: 计算张量在指定维度上的最小值或返回两个张量中每个位置上的最小值。
3.torch.mean: 计算张量在指定维度上的平均值。
4.torch.sum: 沿指定维度计算张量的和。
5.torch.prod: 计算张量在指定维度上的乘积。
6.torch.argmax: 返回张量在指定维度上的最大值的索引。
7.torch.argmin: 返回张量在指定维度上的最小值的索引。
8.torch.exp: 计算张量的指数。
9.torch.log: 计算张量的自然对数。
10.torch.sqrt: 计算张量的平方根。
11.torch.abs: 计算张量的绝对值。
12.torch.sin: 计算张量的正弦值。
13.torch.cos: 计算张量的余弦值。
14.torch.matmul: 执行两个张量的矩阵乘法。
15.torch.cat: 沿指定维度拼接张量。
16.torch.split: 按指定大小或数量分割张量。
17.torch.reshape: 改变张量的形状。

这只是一小部分的例子,PyTorch 提供了许多其他有用的函数,涵盖了各种张量操作、数学运算和神经网络的函数。你可以参考 PyTorch 官方文档以获取完整的函数列表和详细的使用说明。

scatter函数

scatter函数用法

一些案例

import torchinput = torch.zeros(2, 3)  # 创建一个2x3的全零张量
index = torch.tensor([[0, 1, 0], [1, 0, 1]])  # 索引张量
src = torch.tensor([[1, 2, 3], [4, 5, 6]],dtype=input.dtype)  # 要散布的值output = input.scatter(dim=0, index=index, src=src)
print(output)#output
tensor([[1., 5., 3.],[4., 2., 6.]])

个人理解:

scatter 是 PyTorch 中的一个函数,用于将指定值散布(scatter)到目标张量的指定位置。其主要作用是根据给定的索引,将指定的值填充到目标张量的对应位置上。

torch.scatter(input, dim, index, src)
  • input:一个目标张量,用于接收散布结果。
  • dim:一个整数值,指定索引的维度。
  • index:一个索引张量,指定散布值的位置。
  • src:一个源张量,包含要散布的值。

实现过程可以简单的这么理解

遍历src

 for i in range(src.shape[0]):for j in range(src.shape[1]):for k in range(src.shape[2]):input[index[i][j][k]][j][k] = src[i][j][k]  # if dim == 0input[i][index[i][j][k]][k] = src[i][j][k]  # if dim == 1input[i][j][index[i][j][k]] = src[i][j][k]  # if dim == 2

input[index[i][j][k]][j][k] = src[i][j][k] # if dim == 0
input[i][index[i][j][k]][k] = src[i][j][k] # if dim == 1
input[i][j][index[i][j][k]] = src[i][j][k] # if dim == 2

其他

模型的不同模式:train,eval,infer

1.训练模式 (train): 这是模型默认的模式。在训练模式下,模型会执行完整的训练过程,包括前向传播、计算损失、反向传播以及参数更新。在这个模式下,模型会启用 Dropout、Batch Normalization 等训练相关的操作,以更好地适应训练数据。

2.评估模式 (eval): 在评估模式下,模型关闭一些具有随机性的操作,如 Dropout 和 Batch Normalization 的随机丢弃。这样做的目的是为了在评估阶段获得一致的输出,并确保模型的结果可复现。在评估模式下,模型的前向传播行为与训练模式可能有所不同。

该方法一般与模型的torch.no_grad()上下文管理器一同使用,以避免不必要的梯度计算,从而提高评估的效率

示例

model.eval()
with torch.no_grad():# 进行评估操作,不计算梯度# ...

3.推断模式 (infer): 推断模式通常指模型在真实应用中对新数据做出预测的模式。这种模式下,模型类似于评估模式,关闭了一些训练相关的操作,以保持输出稳定性。推断模式与评估模式的概念相似,有时可以用来表示相同的行为。

这些模式的切换可以通过调用模型对象的相应方法实现,例如 model.train()、model.eval()。切换模式的目的是根据任务的不同阶段或需求,调整模型的行为,以获得最佳的训练结果或预测性能。在训练阶段通常使用训练模式,而在评估和推断阶段通常使用评估模式或推断模式。

读取和保存tensor

import torch
tensor=torch.tensor([1,2,3,4,5])
tensor.save(tensor,"tensor.pt")
tensor_load=tensor.load("tensor.pt")

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

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

相关文章

Selenium的使用:WEB功能测试

Selenium是ThrougthWorks公司一个强大的开源WEB功能测试工具系列,本系统包括多款软件 Selenium语言简单,用(Command,target,value)三种元素组成一个行为,并且有协助录制脚本工具,但Selenese有一些严格的限制: …

深入浅出Pytorch函数——torch.nn.init.calculate_gain

分类目录:《深入浅出Pytorch函数》总目录 相关文章: 深入浅出Pytorch函数——torch.nn.init.calculate_gain 深入浅出Pytorch函数——torch.nn.init.uniform_ 深入浅出Pytorch函数——torch.nn.init.normal_ 深入浅出Pytorch函数——torch.nn.init.c…

创建和运行 Ansible 临时命令

创建和运行 Ansible 临时命令 作为系统管理员,您需要在受管节点上安装软件。 请按照正文所述,创建一个名为 /home/curtis/ansible/adhoc.sh 的 shell 脚本,该脚本将使用 Ansible 临时命令在各个受管节点上安装 yum 存储库: 存储库…

mysql的隐式连接和显式连接的区别

隐式连接(Implicit Join)和显式连接(Explicit Join)是 SQL 查询中用于联结多个表的两种不同语法方式。它们的区别主要体现在语法的书写风格和可读性上。 隐式连接: 隐式连接使用逗号 , 将多个表名放在 FROM 子句中&am…

k8s的pv和pvc创建

//NFS使用PV和PVC 1、配置nfs存储 2、定义PV 实现 下图的pv和pvc测试 pv的定义 这里定义5个PV,并且定义挂载的路径以及访问模式,还有PV划分的大小 vim /pv.yamlapiVersion: v1 kind: PersistentVolume metadata:name: pv001 spec:capacity:storage: …

TiDB数据库从入门到精通系列之四:SQL 基本操作

TiDB数据库从入门到精通系列之四:SQL 基本操作 一、SQL 语言分类二、查看、创建和删除数据库三、创建、查看和删除表四、创建、查看和删除索引五、记录的增删改六、查询数据七、创建、授权和删除用户 成功部署 TiDB 集群之后,便可以在 TiDB 中执行 SQL 语…

● 1143.最长公共子序列 ● 1035.不相交的线 ● 53. 最大子序和 动态规划

1143.最长公共子序列 class Solution { public:int longestCommonSubsequence(string text1, string text2) {int res0;vector<vector<int>> dp(text1.size() 1, vector<int>(text2.size() 1, 0));for (int i 1; i < text1.size(); i) {for (int j 1…

Linux网络编程(epoll的ET模式和LT模式)

文章目录 前言一、ET模式和LT模式概念讲解1.水平触发模式&#xff08;LT&#xff0c;Level-Triggered&#xff09;2.边缘触发模式&#xff08;ET&#xff0c;Edge-Triggered&#xff09; 二、边缘触发和水平触发适用的场景总结 前言 本篇文章主要来讲解epoll的ET模式和LT模式&…

原型和原型链

好久没记了有点忘记了&#xff0c;来记录一下。 1、函数和对象的关系&#xff1a;对象都是通过函数创建的&#xff0c;函数也是一个对象。 2、原型和原型链 1.原型&#xff1a;原型分为两种 prototype&#xff1a;每一个函数都会有prototype属性&#xff0c;它指向函数的原型…

Three.js程序化3D城市建模【OpenStreetMap】

对于我在 Howest 的研究项目&#xff0c;我决定构建一个 3D 版本的 Lucas Bebber 的“交互式讲故事的动画地图路径”项目。 我将使用 OSM 中的矢量轮廓来挤出建筑物的形状并将它们添加到 3js 场景中&#xff0c;随后我将对其进行动画处理 推荐&#xff1a;用 NSDT编辑器 快速搭…

C++坦克大战源代码

源码: #include <iostream> #include <time.h> #include <windows.h>#define W 1 //上 #define S 2 //下 #define A 3 //左 #define D 4 //右 #define L 5 // 坦克有4条命void HideCursor() { //隐藏光标 …

Flask-flask系统运行后台轮询线程

对于有些flask系统&#xff0c;后台需要启动轮询线程&#xff0c;执行特定的任务&#xff0c;以下是一个简单的例子。 globals/daemon.py import threading from app.executor.ops_service import find_and_run_ops_task_todo_in_redisdef context_run_func(app, func):with …

【会议征稿信息】第二届信息学,网络与计算技术国际学术会议(ICINC2023)

2023年第二届信息学&#xff0c;网络与计算技术国际学术会议(ICINC2023) 2023 2nd International Conference on Informatics,Networking and Computing (ICINC 2023) 2023年第二届信息学&#xff0c;网络与计算技术国际学术会议(ICINC2023)将于2023年10月27-29日于中国武汉召…

首起针对国内金融企业的开源组件投毒攻击事件

简述 2023年8月9日&#xff0c;墨菲监控到用户名为 snugglejack_org (邮件地址&#xff1a;SnuggleBearrxxhotmail.com&#xff09;的用户发布到 NPM 仓库中的 ws-paso-jssdk 组件包具有发向 https://ql.rustdesk[.]net 的可疑流量&#xff0c;经过确认该组件包携带远控脚本&a…

.NET Core6.0使用NPOI导入导出Excel

一、使用NPOI导出Excel //引入NPOI包 HTML <input type"button" class"layui-btn layui-btn-blue2 layui-btn-sm" id"ExportExcel" onclick"ExportExcel()" value"导出" />JS //导出Excelfunction ExportExcel() {…

aardio开发语言Excel数据表读取修改保存实例练习

import win.ui; /*DSG{{*/ var winform win.form(text"aardio form";right759;bottom479) winform.add( buttonEnd{cls"button";text"末页";left572;top442;right643;bottom473;z6}; buttonExcelRead{cls"button";text"读取Exce…

迷路的机器人(递归回溯+动态规划两个方法实现)

题目&#xff1a; 设想有个机器人坐在一个网格的左上角&#xff0c;网格 r 行 c 列。机器人只能向下或向右移动&#xff0c;但不能走到一些被禁止的网格&#xff08;有障碍物&#xff09;。设计一种算法&#xff0c;寻找机器人从左上角移动到右下角的路径。 示例&#xff1a;…

Qt实现简单的漫游器

文章目录 Qt的OpenGL窗口GLSL的实现摄像机类的实现简单的漫游器 Qt的OpenGL窗口 Qt主要是使用QOpenGLWidget来实现opengl的功能。  QOpenGLWidget 提供了三个便捷的虚函数&#xff0c;可以重载&#xff0c;用来重新实现典型的OpenGL任务&#xff1a; paintGL&#xff1a;渲染…

数据结构,链表,单链表,双链表,循环链表,双向循环链表

链表是数据结构中的一个基本概念&#xff0c;它是线性表的一种实现。链表与顺序表&#xff08;基于数组的线性表&#xff09;不同&#xff0c;链表的元素不需要在内存中连续存储。链表的每个元素由一个节点来表示&#xff0c;每个节点都有一个数据部分和一个指针部分。 以下是…

【数据库系统】--【5】DBMS查询处理

DBMS查询处理 01查询处理概述02查询编译词法、语法分析语义分析查询重写查询优化 03查询执行算法04查询执行模型 01查询处理概述 02查询编译 词法、语法分析 语义分析 查询重写 查询优化 03查询执行算法 04查询执行模型 小结 ● 查询处理概述 ● 查询编译 词法、语法分析语义分…