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

Pytorch中的主要函数

目录

  • 一、torch.manual_seed(seed)
  • 二、torch.cuda.manual_seed(seed)
  • 三、torch.rand(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)
  • 四、给大家写一个常用的自动选择电脑cuda 或者cpu 的小技巧
  • 五、torch.version.cuda;torch.backends.cudnn.version();打印cuda、cudnn版本
  • 六、torch.autograd.grad()自动求梯度

我就基本的解释一下吧,!

一、torch.manual_seed(seed)

功能: 用于手动设置 PyTorch 的随机数生成器的种子。当你设置了一个特定的种子后,后续所有依赖随机数生成的操作都会产生可重复的结果。
参数: seed 是一个整数,取值范围通常是 32 位整数范围(-2147483648 到 2147483647)。

示例代码如下:

import torch# 设置随机种子
torch.manual_seed(42)
# 生成随机张量
tensor1 = torch.randn(2, 2)
print(tensor1)# 再次设置相同的种子
torch.manual_seed(42)
tensor2 = torch.randn(2, 2)
print(tensor2)# 验证两次生成的张量是否相同
print(torch.allclose(tensor1, tensor2))  # 输出 True

运行结果如下图:
在这里插入图片描述
(一般还有个torch.seed()但是被弃用了,因为每次都是随机的结果,在科研啥的,一般都手动指定随机数种子,)

先解释一下,什么是随机数种子:
PyTorch 中随机数种子的作用原理
随机数种子就像是随机数生成器的起始状态标识。在 PyTorch 里,随机数生成器是基于特定的算法(如 Mersenne Twister 算法)来工作的。当你设置一个随机数种子时,实际上是将随机数生成器初始化为一个特定的状态。

从这个特定状态开始,随机数生成器会按照固定的算法规则生成一系列随机数。只要种子不变,每次从这个状态开始生成的随机数序列都是相同的。这就保证了在相同的代码和相同的种子设置下,每次运行代码时,所有依赖随机数生成的操作(如初始化模型权重、打乱数据集等)都会产生相同的结果,从而实现实验的可重复性。

例如,在神经网络训练中,我们通常会随机初始化模型的权重。如果不设置随机数种子,每次运行代码时权重的初始化值都不同,那么模型的训练结果也会有差异,不利于实验结果的对比和分析。而通过设置固定的随机数种子,我们可以确保每次运行代码时模型的初始权重是相同的,这样就可以更准确地评估不同训练参数或方法对模型性能的影响。

二、torch.cuda.manual_seed(seed)

功能: 专门为 CUDA 设备(即 GPU)设置随机数种子。如果你的代码在 GPU 上运行,使用这个函数可以确保在 GPU 上的随机操作具有可重复性。
参数: seed 同样是一个整数。

import torchif torch.cuda.is_available():# 为 CUDA 设备设置随机种子torch.cuda.manual_seed(42)# 在 GPU 上生成随机张量device = torch.device("cuda")tensor = torch.randn(2, 2).to(device)print(tensor)

在这里插入图片描述
注意:没有CUDA的就别跑了,会报错的。

三、torch.rand(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)

功能: 生成指定形状的服从均匀分布的随机数张量,取值范围是 [0, 1)。
参数:
*size: 张量的形状,例如 (2, 3) 表示生成一个 2 行 3 列的张量。
out: 可选参数,用于指定输出张量。
dtype: 张量的数据类型。
layout: 张量的布局,一般使用默认的 torch.strided。
device: 张量存储的设备,如 ‘cpu’ 或 ‘cuda’。
requires_grad: 是否需要计算梯度。

import torch# 生成一个 2 行 3 列的随机张量
random_tensor = torch.rand(2, 3)
print(random_tensor)

示例结果:
在这里插入图片描述

四、给大家写一个常用的自动选择电脑cuda 或者cpu 的小技巧

import torch# 判断 CUDA 是否可用
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print(f"Using device: {device}")

在这里插入图片描述

五、torch.version.cuda;torch.backends.cudnn.version();打印cuda、cudnn版本

import torch# 判断 CUDA 是否可用
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")print(f"Using device: {device}")print(torch.cuda.is_available()) #查看是否有cuda
print(torch.backends.cudnn.is_available()) #查看是否有cudnn
print(torch.version.cuda) #打印cuda的版本
print(torch.backends.cudnn.version()) #打印cudnn的版本

我的运行结果如下:
在这里插入图片描述
大家如果有安装环境有问题的也可以私信我哦~

六、torch.autograd.grad()自动求梯度

torch.autograd.grad()用于求取梯度;
函数原型:
torch.autograd.grad(outputs, inputs, grad_outputs=None, retain_graph=None, create_graph=False, only_inputs=True, allow_unused=False)

outputs:
类型:Tensor 或 Tensor 列表
描述:目标张量,即需要计算梯度的张量。
inputs:
类型:Tensor 或 Tensor 列表
描述:输入张量,用于计算梯度的张量。
grad_outputs(可选):
类型:Tensor 或 Tensor 列表
描述:目标张量对应的梯度。如果outputs 是一个标量,则 grad_outputs 不需要指定;如果 outputs 是一个张量或张量列表,需要指定 grad_outputs 的形状与之对应。
retain_graph(可选,默认值:None):
类型:布尔值
描述:是否保留计算图。在默认情况下,计算图在反向传播后会被释放以节省内存。如果需要多次反向传播同一个计算图,可以设置为 True。
create_graph(可选,默认值:False):
类型:布尔值
描述:是否创建新的计算图。如果设置为 True,梯度计算将被跟踪,生成的梯度张量将保留计算图,从而允许进行高阶导数的计算。
only_inputs(可选,默认值:True):
类型:布尔值
描述:是否只计算输入张量的梯度。如果设置为 True,仅输入张量的梯度会被计算。
allow_unused(可选,默认值:False):
类型:布尔值
描述:是否允许输入张量未被使用。如果某些输入张量未被 outputs 使用,并且没有被计算梯度,则会抛出错误。如果设置为 True,这些未使用的输入张量的梯度将返回为 None。
返回值
类型:Tensor 或 Tensor 列表
返回对应输入张量的梯度。

outputs:是你希望对其进行求导的标量

import torch# 创建两个张量,requires_grad=True 表示需要计算梯度
x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
y = torch.tensor([4.0, 5.0, 6.0], requires_grad=True)# 定义一个函数 z = x * y
z = x * y# 使用 torch.autograd.grad() 计算梯度
grad_z_x = torch.autograd.grad(outputs=z, inputs=x, grad_outputs=torch.ones_like(z))print("梯度 dz/dx:", grad_z_x)

在这里插入图片描述


后面如果还有什么用到的,我会在这继续更新…ing!

相关文章:

Pytorch中的主要函数

目录 一、torch.manual_seed(seed)二、torch.cuda.manual_seed(seed)三、torch.rand(*size, outNone, dtypeNone, layouttorch.strided, deviceNone, requires_gradFalse)四、给大家写一个常用的自动选择电脑cuda 或者cpu 的小技巧五、torch.version.cuda;torch.bac…...

Java实现大数据量导出报表

一、实现方式 在Java中,导出数据到Excel有多种方式,每种方式都有其优缺点,适用于不同的场景。以下是常见的几种方式及其特点: 1.1 Apache POI Apache POI 是 Java 中最流行的库,支持读写 Excel 文件(包括…...

大语言模型 智能助手——既能生成自然语言回复,又能在必要时调用外部工具获取实时数据

示例代码: import json from langgraph.graph import Graph, END,StateGraph from langchain_core.utils.function_calling import convert_to_openai_function from langchain_community.tools.openweathermap import OpenWeatherMapQueryRun from langchain_core…...

PyTorch 系统教程:理解机器学习数据分割

数据分割是机器学习中的一个基本概念,它直接影响模型的性能和泛化。在本文中,我们将深入研究为什么数据分割在机器学习中很重要,并演示如何使用PyTorch有效地实现它。 理解数据分割 数据分割是将数据集划分为单独的组以进行训练、验证和测试…...

分水岭算法(Watershed Algorithm)教程:硬币分割实例

import cv2 import numpy as np# 1. 图像预处理 img cv2.imread("./water/water_coins.jpeg") gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ret, thresh cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV cv2.THRESH_OTSU) kernel np.ones((3, 3), np.int8)…...

【STM32项目实战系列】基于STM32G474的FDCAN驱动配置

前言:本周工作中用到了CANFD的驱动,由于以前都是用到的CAN2.0,所以过程并不是特别的顺利,所以中间遇到几个比较小的问题导致自己卡住了一段时间,特此记录一下并完全奉上自己的配置的源码。 1,CANFD配置与简…...

shell文本处理

shell文本处理 一、grep ​ 过滤来自一个文件或标准输入匹配模式内容。除了 grep 外,还有 egrep、fgrep。egrep 是 grep 的扩展,相当于 grep -E。fgrep 相当于 grep -f,用的比较少。 用法 grep [OPTION]... PATTERN [FILE]...支持的正则描述…...

如何利用客户端双向TLS认证保护云上应用安全

双向TLS(mTLS)通过要求服务器和客户端双方使用数字证书来验证彼此身份,从而扩展了传统TLS的安全性。常规的TLS只会验证服务器的身份(如大家的浏览器在验证网站时的场景),而mTLS确保在任何数据交换发生之前,双方都对彼此持有信任。在本文中&am…...

nlp第十节——LLM相关

一、模型蒸馏技术 本质上是从一个大模型蒸馏出小模型,从小模型训练出来的概率分布(如自回归模型预测下一个字的概率分布)分别与大模型预测的概率分布和ground label求loss。与大模型预测的概率分布用KL散度求loss,与ground label用…...

T-SQL 语言基础: SQL 数据库对象元数据及配置信息获取

目录 介绍目录视图 获取表和架构名称获取列信息 信息架构视图 获取表信息获取列信息 系统存储过程和函数 获取对象列表获取对象详细信息获取约束信息获取数据库属性信息 总结引用 介绍 在 SQL 数据库管理中,获取数据库对象的元数据信息是至关重要的。元数据提供了…...

ue5 创建多列StreeView的方法与理解

创建StreeView的多列样式怎么就像是创建单行单列差不多?貌似就是在单行单列中加入了多列widget? 示例代码 DetailTabWidget #pragma once #include "TreeViewItemBase.h"class SDetailTabWidget : public SCompoundWidget {SLATE_BEGIN_ARGS(SDetailT…...

C# OnnxRuntime部署DAMO-YOLO香烟检测

目录 说明 效果 模型信息 项目 代码 下载 参考 说明 效果 模型信息 Model Properties ------------------------- --------------------------------------------------------------- Inputs ------------------------- name:input tensor:Floa…...

陕西省地标-DB61/T 1121-2018 政务服务中心建设和运营规范

揭秘陕西省智慧政务服务中心新标准:打造高效便捷的服务新体验 随着信息化时代的深入发展,智慧政务已成为提升政府服务效率、优化营商环境的重要举措。陕西省作为全国政务改革的先行者,近期颁布了《陕西省地标-DB61_T 1121-2018 政务服务中心…...

UDP协议(20250303)

1. UDP UDP:用户数据报协议(User Datagram Protocol),传输层协议之一(UDP,TCP) 2. 特性 发送数据时不需要建立链接,节省资源开销不安全不可靠的协议 //一般用在实时性比较高…...

【四.RAG技术与应用】【12.阿里云百炼应用(下):RAG的云端优化与扩展】

在上一篇文章中,我们聊了如何通过阿里云百炼平台快速搭建一个RAG(检索增强生成)应用,实现文档智能问答、知识库管理等基础能力。今天咱们继续深入,聚焦两个核心问题:如何通过云端技术优化RAG的效果,以及如何扩展RAG的应用边界。文章会穿插实战案例,手把手带你踩坑避雷。…...

Docker新手入门(持续更新中)

一、定义 快速构建、运行、管理应用的工具。 Docker可以帮助我们下载应用镜像,创建并运行镜像的容器,从而快速部署应用。 所谓镜像,就是将应用所需的函数库、依赖、配置等应用一起打包得到的。 所谓容器,为每个镜像的应用进程创建…...

【星云 Orbit • STM32F4】08. 用判断数据头来接收据的串口通用程序框架

【星云 Orbit • STM32F4】08. 用判断数据头来接收据的串口通用程序框架 1. 引言 本教程旨在帮助嵌入式开发小白从零开始,学习如何在STM32F407微控制器上实现一个基于串口的数据接收程序。该程序能够通过判断数据头来接收一串数据,并将其存储到缓冲区中…...

HSPF 水文模型建模方法与案例分析实践技术应用

在水文模拟领域,HSPF 模型(Hydrological Simulation Program Fortran)与 SWAT 模型一样,都是备受瞩目的水文模型软件。HSPF 模型因其强大的功能和简便的操作,在全球范围内得到了广泛应用。该模型不仅能够在缺乏测量数据…...

设置 CursorRules 规则

为什么要设置CursorRules? 设置 CursorRules 可以帮助优化代码生成和开发流程,提升工作效率。具体的好处包括: 1、自动化代码生成 :通过定义规则,Cursor 可以根据你的开发需求自动生成符合规定的代码模板&#xff0c…...

人工智能AI在汽车设计领域的应用探索

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...

篇章二 论坛系统——系统设计

目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...

基于单片机的宠物屋智能系统设计与实现(论文+源码)

本设计基于单片机的宠物屋智能系统核心是实现对宠物生活环境及状态的智能管理。系统以单片机为中枢,连接红外测温传感器,可实时精准捕捉宠物体温变化,以便及时发现健康异常;水位检测传感器时刻监测饮用水余量,防止宠物…...

怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)

+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...

如何把工业通信协议转换成http websocket

1.现状 工业通信协议多数工作在边缘设备上,比如:PLC、IOT盒子等。上层业务系统需要根据不同的工业协议做对应开发,当设备上用的是modbus从站时,采集设备数据需要开发modbus主站;当设备上用的是西门子PN协议时&#xf…...