Pytorch中的主要函数

目录

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

一、torch.manual_seed(seed)

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

示例代码如下:

python 复制代码
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 同样是一个整数。

python 复制代码
import torch

if 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: 是否需要计算梯度。

python 复制代码
import torch

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

示例结果:

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

python 复制代码
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版本

python 复制代码
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:是你希望对其进行求导的标量

python 复制代码
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!

相关推荐
9命怪猫25 分钟前
AI大模型-提示工程学习笔记21-图提示 (Graph Prompting)
人工智能·学习·ai·大模型·prompt
Kai HVZ30 分钟前
《OpenCV》——人脸检测
人工智能·opencv·计算机视觉
eqwaak036 分钟前
2025年2月28日全球科技信息差:技术革新、市场震荡与认知重构
开发语言·人工智能·科技·学习·重构
luoganttcc1 小时前
在阿波罗自动驾驶框架中, 全局路径规划用什么算法
人工智能·机器学习·自动驾驶
liruiqiang051 小时前
神经网络 - 激活函数(Sigmoid 型函数)
人工智能·深度学习·神经网络·机器学习
白白糖1 小时前
Day 52 卡玛笔记
python·算法·力扣
MYX_3091 小时前
Python 编程题 第四节:斐波那契数列、列表的复制、暂停后输出、成绩评级、统计字符
开发语言·python·学习
码界筑梦坊1 小时前
基于Flask的红袖网小说数据可视化分析系统
python·信息可视化·数据挖掘·数据分析·flask·毕业设计
Ven%1 小时前
dify接入语音转文本模型后报错: microphone not authorized
人工智能·python·docker·dify
花果山-马大帅1 小时前
机器学习之集成学习思维导图
人工智能·python·机器学习·集成学习