pytorch的主要模块

article/2025/8/30 4:39:54

1. torch模块

torch模块包含了一些pytorch的常用激活函数,如Sigmoid(torch.sigmoid)、ReLu(torch.relu)和Tanh(torch.tanh);同时也包含了pytorch张量的一些计算操作,如矩阵的乘法(torch.mm)、张量元素的选择(torch.select)。注意,该模块中计算的对象大多数是pytorch张量。
例:

a = torch.randn(1,2,3,4,5)
torch.numel(a)

在这里插入图片描述

2. torch.Tensor模块

torch.Tensor模块定义了torch中的张量类型,如张量中的数值类型有单精度、双精度浮点和整型等,并且张量有一定的维数和形状。如果张量方法后缀带下划线,则该方法会修改张量本身的数据,反之则会返回新的张量。例如,Tenor.add方法会让当前张量和输入参数张量做加法,返回新的张量,而Tensor。add_方法会改变当前张量的值。
例:

a = torch.tensor(1)
b = torch.tensor(2)
print(torch.Tensor.add(a, b))
print(torch.Tensor.add_(a, b))

在这里插入图片描述

3. torch.sparse模块

torch.sparse模块定义了稀疏张量,其中构造的稀疏张量采用的是COO格式(Coordinate),主要方法是用一个长整型定义非零元素的位置,用浮点数张量定义对应非零元素的值。稀疏张量之间可以做元素加减乘除运算和矩阵乘法。
例:

i = [[0, 1, 1],[2, 0, 2]]
v =  [3, 4, 5]
torch.sparse_coo_tensor(i, v, (2, 3))

在这里插入图片描述

4. torch.cuda模块

torch.cuda模块定义了与CUDA运算相关的一系列函数,包含但不限于检查系统的CUDA是否可用,当前进程对应的GPU序号(在多GPU情况下),清除GPU上的缓存,设置GPU的计算流(Stream),同步GPU上执行的所有核函数(Kernel)等。
例:

torch.cuda.is_available()

在这里插入图片描述

5. torch.nn模块

torch.nn是pytorch神经网络模块化的核心。该模块定义了一系列模块,包括卷积层nn.ConvNd(N=1,2,3)和线性层(全连接层)nn.Linear等。当我们构建深度学习模型的时候,可以通过继承nn.Module类并重写forward方法来实现一个新的神经网络。此外,torch.nn也定义了平方损失函数(torch.nn.MSELoss)、交叉熵损失函数(torch.nn.CrossEntropyLoss)等损失函数。可以直接对torch.nn中定义的神经网络参数使用优化器进行训练。
例:

import torch.nn as nn
import torch.nn.functional as Fclass Model(nn.Module):def __init__(self):super(Model, self).__init__()self.conv1 = nn.Conv2d(1, 20, 5)self.conv2 = nn.Conv2d(20, 20, 5)def forward(self, x):x = F.relu(self.conv1(x))return F.relu(self.conv2(x))

6. torch.functional函数模块

torch.nn.functional函数模块定义了一些神经网络相关的函数,包括卷积函数和池化函数等,这些函数也是深度学习模型构建的基础。
例:

import torch.nn.functional as Finputs = torch.randn(33, 16, 30)
filters = torch.randn(20, 16, 5)
F.conv1d(inputs, filters)

在这里插入图片描述

7. torch.nn.init模块

torch.nn.init模块定义了神经网络权重的初始化,包含了很多初始化方法,如均匀初始化torch.nn.init.uniform_和正太分布归一化torch.nn.init.normal_等。
例:

w = torch.empty(3, 5)
nn.init.uniform_(w)

在这里插入图片描述

8. torch.optim模块

torch.optim模块定义了一系列的优化器,如torch.optim.SGD(随机梯度下降算法)、torch.optim.AdaGrad(adaGrad算法)、torch.optim.RMSprop(RMSProp算法)和torch.optim.Adam(Adam算法)等。当然,这个模块还包含学习率衰减的算法子模块,即torch.optim.lr_scheduler。该模块还包含了学习率阶梯下降算法torch.optim.lr_scheduler.StepLR和余弦退火算法torch.optim.lr_scheduler.CosineAnnealingLR等学习率衰减算法。

9. torch.autograd模块

torch.autograd模块就是pytoch的自动微分算法模块,包括torch.autograd.backward函数,主要作用是求得损失函数之后进行反向梯度传播,torch.autograd.grad函数用于一个标量张量(即只有一个分量的张量)对另一个张量求导,以及在代码中设置不参与求导的部分。
例:

x = torch.randn((1, 1), requires_grad=True)
with torch.autograd.profiler.profile() as prof:for _ in range(100):y = x ** 2
print(prof.key_averages().table(sort_by="self_cpu_time_total"))

在这里插入图片描述

10. torch.distributed模块

torch.distributed是pytorch的分布式计算模块,主要是提供pytorch并行运算环境,其主要支持的后端有MPI、Gloo和NCCL三种。pytorch的分布式工作原理是启动多个并行的进程,每个进程拥有一个模型的备份,然后输入不同训练函数到多个并行的进程,计算损失函数,每个进程独立地做反向传播,最后所有进程权重张量的梯度做归约(Reduce)。用到后端的部分主要是数据的广播(Broadcast)和数据的收集(Gather),其中,前者是把数据从一个节点(进程)传播到另一个节点(进程),比如把梯度张量从其他节点转移到某个特定的节点,然后对所有的张量求平均。

11. torch.distributions模块

torch.distributons提供了使得pytorch能够对不同的分布进行采样,并且生成概率采样过程的计算图的相关类。比如在强化学习(Reinforcement Learing)中,经常会使用一个深度学习模型来模拟在不同环境条件下采取的策略(Policy),其最后的输出时不同动作的概率。当深度学习模型输出概率之后,需要根据概率对策略进行采样来模拟当前的策略概率分布,最后用梯度下降方法来让最优策略的概率最大(也称为策略梯度下降,Policy Gradient)。因为采样的输出结果是离散的,无法直接求导,所以不能使用反向传播的方法来优化网络。我们可以使用torch.distributions.Categorical进行采样,然后使用对数求导技巧来规避这个问题。
例:

params = policy_network(state)
m = Normal(*params)
action = m.rsample()
next_state, reward = env.step(action)
loss = -reward
loss.backward()

12. torch.hub模块

torch.hub提供了一系列预训练的模型供用户使用。比如,可以通过torch.hub.list函数来获取某个模型镜像站点的模型信息。通过torch.hub.load来载入预训练的模型,载入后的模型也可以保存到本地。
例:

entrypoints = torch.hub.list('pytorch/vision', force_reload=True)

13. torch.jit模块

torch.jit是pytorch的实时编辑器(Just-In-Time Compiler,JIT)模块。该模块就是把pytorch的动态图转换成可以优化和序列化的静态图,其主要工作原理是通过预先定义好的张量,追踪整个动态图的构建过程,得到最终构建出来的动态图,然后转换为静态图(通过中间表示,即Intermediate Representation,来描述最后得到的图)。

14. torch.multiprocessing模块

torch.multiprocessing是pytorch中的多进程API。通过使用这个模块,可以启动不同的进程,每个进程运行不同的深度学习模型,并且能够在进程间共享张量(通过共享内存的方式)。共享的张量可以在CPU上,也可以在GPU上,多进程API还提供了与Python原生的多进程API(即multiprocessing库)相同的一系列函数,包括锁(Lock)和队列(Queue)等。

15. torch.random模块

torch.random提供了一系列的方法来保存和设置随机生成器的状态,包括使用get_mg_state函数获取当前随机数生成器状态,set_rng_state函数设置当前随机数生成器状态,并且可以使用manual_seed函数来设置随机种子,也可以使用initial_seed函数来得到程序初始化的随机种子。神经网络的训练是一个随机过程,包括数据的输入、权重的初始化都有一定的随机性。设置一个统一的随机种子可以有效地帮助我们测试不同结构神经网络的表现,有助于调试神经网络的结构。

16. torch.onnx模块

torch.onnx定义了pytorch导出和载入ONNX格式的深度学习模型描述文件。该模块可以方便pytorch导出模型给其他深度学习框架使用,或者让pytorch可以载入其他深度学习框架构建的深度学习模型。
例:

import torch
import torchvisiondummy_input = torch.randn(10, 3, 224, 224, device="cpu")
model = torchvision.models.alexnet(pretrained=True).cpu()
input_names = [ "actual_input_1" ] + [ "learned_%d" % i for i in range(16) ]
output_names = [ "output1" ]
torch.onnx.export(model, dummy_input, "alexnet.onnx", verbose=True, input_names=input_names, output_names=output_names)

在这里插入图片描述


http://chatgpt.dhexx.cn/article/iMdAOEIN.shtml

相关文章

np.random.seed()随机数种子学习笔记

文章目录 np.random.seed()随机数种子为什么使用np.random.seed()什么是np.random.seed() 代码理解np.random.seed()的参数适用情况 np.random.seed()随机数种子 为什么使用np.random.seed() 在机器学习中,有很多的操作和算法带有一定的随机性,所以在复…

种子项目详解

引言 在上一篇文章简单讲解了种子项目搭建,但是项目搭建起来是为了方便我们后续开发的。因此了解整个项目的架构,以及各个Maven模块是如何各司其职、相互依赖,是至关重要的。 这里分成两块介绍 lenosp自带的内容新增扩展的内容 lenosp自带…

【Abp VNext】实战入门(九):DbMigrator 自定义项目所需种子数据

前言: 项目开发过程中难免会涉及到一些业务相关的基础数据,我们称之为种子数据,主要为了方便测试功能或者展示效果; 常规做法是手动到数据库表创建数据,但是随着表结构更改或者数据清空后,又要重新录入基…

区块链模块化的大胆尝试,解读公链Celestia

作为以链游为主的社区,暴躁兔也会时常关注加密行业的其他赛道和方向。对于目前市场而言,公链的机会与红利仍然存在,且相对而言,技术创新较多,同时资本也比较喜欢这样的赛道。今天为大家讲解的是Cosmos生态的项目Celest…

scrapy_redis种子优化

前言: 继《scrapy_redis去重优化(已有7亿条数据),附Demo福利》优化完去重之后,Redis的内存消耗降了许多,然而还不满足。这次对scrapy_redis的种子队列作了一些优化(严格来说并不能用上“优化”…

总结一下Python的模块加载解析

正式的Python专栏第16篇,同学站住,别错过这个从0开始的文章! 学委之前分享了很多代码,也发布了几个库。 新手可以从两篇基础文章入手学习,积累了一些代码,可以考虑做成一个个模块,包装代码有利…

C++ 函数(模块化编程)

目录 函数定义 函数 函数定义的语法形式 函数调用 调用函数需要先声明函数原型 函数调用形式 嵌套调用 例3-1编写一个求x的n次方的函数 例3-2 数制转换 源代码: 例3-3 编写程序求π的值 arctan函数 主程序 例3-4 寻找并输出11~999之间的数M&#xf…

单片机常开常闭检测

单片机检测常开常闭点(干接点信号)的方法:检测干接点的闭合和断开,从而单片机实施一定的操作,它具有两根线,具体步骤:1、引出单片机一个IO口线,连接干接点一端。2、干接点另一端通过…

干海星怎么吃做法 干海星的功效与作用有哪些

干海星是生活中并不常见的一种海鲜类食材,在很多人眼中干海星都是一种中药材,其实它也可以当做一种菜品来食用,那么干海星应该怎么吃呢?接下来我就把自己总结的干海星吃法大全写出来分享给大家。 干海星怎么吃 干海星的功效与作用…

大前端干货资料

JavaScript 文档:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference ES6 入门教程:https://es6.ruanyifeng.com/ Vue 官网:https://cn.vuejs.org router 官网:https://router.vuejs.org/zh UI框架 Ele…

干簧管(磁开关)

其实干簧管的工作原理并不复杂 干簧管的特点: 干簧管是干式舌簧管的简称,是一种有触点的无源电子开关元件,具有结构简单,体积小便于控制等优点,其外壳一般是一根密封的玻璃管,管中装有两个铁质的弹性簧片…

苹果手机位置共享后没开启定位服务器,iPhone默认开启但无卵用的设置开着干嘛?难怪手机这么耗电...

原标题:iPhone默认开启但无卵用的设置开着干嘛?难怪手机这么耗电 如果你的苹果手机开启了定位功能,那么在iPhone【设置】-【隐私】-【定位服务】-系统服务】,点击进入后有很多项开关,而很多都是在打开定位服务后默认开…

adams打不开提示msc license_adams安装后打不开

虽然要支持正版……但是 安装后打不开,借鉴了adams2017安装教程后台留言 图片发自简书App 1.首先我这么做是因为其实在安装过程中就有一次没找到路径 。所以该方法仅供参考。 图片发自简书App 此时我直接在“此电脑”内搜索“MSC.Software”了 图片发自简书App 耐心…

使用Arduino开发板连接干簧管(Reed Switch)的方法

topic 1.干簧管(Reed Switch)干簧管的特点:模块使用说明:干簧管有两种常见的类型:干簧管常见的应用需要的组件代码 1.干簧管(Reed Switch) 干簧管,又称磁力开关或磁簧开关&#xff0…

查看电脑使用日志------电脑干了些什么,别人是否动了你的电脑

** 现在我们都有了电脑,有时候短暂的离开可能会有人偷偷的查看你的电脑,有意无意的,总是会感觉心里不是很踏实,那么怎么知道自己的电脑有没有被别人偷偷的查看呢,下面我们通过一些列操作查看电脑是否被别人动过&#x…

高版本envi打不开Landsat8 C2L2数据解决教程

引申部分不写,直接开干 首先找到你的Landsat8 C2L2数据 进入后将首行GROUP LANDSAT_METADATA_FILE改为GROUP L1_METADATA_FILE 编辑—查找—GROUP LEVEL1_PROCESSING_RECORD,查找下一处可得该区域总和 将 GROUP LEVEL1_PROCESSING_RECORD 到 END_…

【错误记录】Melodyne 报错 ( 无法打开音频文件 )

文章目录 一、报错信息二、修改音源格式三、继续使用 Melodyne 打开 一、报错信息 打开一个 48000Hz , 立体声音源 , 采样位数 32 位的采样 , 无法打开 , 报下面的错误 ; 这是用 Bandicam 录制的音频 , 感觉有点问题 , 之后使用 Au 录制音频 ; 二、修改音源格式 在 Adobe Audit…

带你了解测开

测开——测试开发工程师 测试开发工程师 (Software Development Engineer in Test,简称SDET)是指那些既可以称作是开发人员,同时也负责软件开发阶段和测试周期的测试工作的技术人员。一个专业的SDET更关注软件产品的可测性,稳健性和性能。他…

开干,开源 k8s 负载均衡器大比拼

原文链接:https://ewhisper.cn/posts/29610/ 🧠 译者声明: 请注意文章发布时间,时间比较久远,部分观点可能已经过时。原文作者为 PureLB 的利益相关者,所以本文可能不尽客观。 词汇表 英文中文备注LoadBala…

开干!Elasticsearch官方文档离线访问实操指南

Elasticsearch 最少必要知识实战教程直播回放 1、开发不能联网怎么访问Elasticsearch文档? 这是最近被频繁问到的问题。直接上个图: 不能让 Elasticsearch 文档限制了你我的学习热情! 2、直接开干 步骤1:访问:https://…