pytorch基础(1)

本文介绍了PyTorch中的基础概念,包括随机抽样函数如torch.seed()和torch.manual_seed(),自动微分模块torch.autograd.backward()和torch.autograd.grad(),以及统计和矩阵运算。文中详细阐述了如何使用这些函数,并提供了实际操作示例,如拟合余弦函数曲线的动手练习。
摘要由CSDN通过智能技术生成

pytorch与数学基础

pytorch中5种随机抽样函数

  1. torch.seed
    用于生成不确定的随机数,返回一个64位的数值

  2. torch.manual_seed(seed)
    设定生成随机数的种子,并返回一个torch.Generator对象。(torch.Generator是PyTorch中的一个对象,用于管理随机数生成)
    参数:种子seed为int类型或long类型
    (long是一种数据类型,主要用于存储大的整数。long类型的整数的大小比标准的int类型的整数更大。)

  3. torch.initial_seed()
    返回生成随机数的原始种子值

import torch
# 设置一个种子值
torch.manual_seed(123)
# 输出初始种子
print(torch.initial_seed())  # 输出:123
  1. torch.get_rng_state()
    返回随机生成器状态(Byte Tensor)
torch.get_rng_state()
# 输出:tensor([12,  0,  0,  ...,  0,  0,  0], dtype=torch.uint8)
  1. torch.set_rng_state(new_state)
    设定随机生成器状态
    参数:new_state是期望的状态
rng_state1 = torch.get_rng_state()
print(rng_state1)
torch.set_rng_state(rng_state1*2)
rng_state2 = torch.get_rng_state()
print(rng_state2)
# 输出: tensor([12,  0,  0,  ...,  0,  0,  0], dtype=torch.uint8)
tensor([24,  0,  0,  ...,  0,  0,  0], dtype=torch.uint8)
import torch
# 创建一个生成器并设置一个种子
g = torch.Generator()
g.manual_seed(42)
# 获取生成器的状态
state = g.get_state()
# 在其他地方,你可以设置生成器的状态来复现同样的随机序列
g_other = torch.Generator()
g_other.set_state(state)
# 现在,g和g_other将生成相同的随机序列

注:pytorch中生成器的状态和种子的区别
种子(Seed):种子是初始化随机数生成器的一个值。给定相同的种子,随机数生成器将会产生相同的随机数序列。这在需要复现实验结果的情况下非常有用。比如可以使用torch.manual_seed(seed)函数来设置全局种子,或者使用torch.Generator().manual_seed(seed)为特定的生成器设置种子。
生成器的状态(Generator state):生成器的状态是一个包含了当前随机数生成器所有信息的对象,这些信息包括种子以及其他内部状态值,比如已经生成的随机数的数量等。你可以使用torch.Generator().get_state()方法获取当前的状态,使用torch.Generator().set_state(state)方法设置当前的状态。
因此,种子是决定随机序列开始的一个数值,而生成器的状态则包含了更多的信息,比如生成器已经生成了多少个随机数,下一个将要生成的随机数是什么等。通过设置和获取生成器的状态,你可以精确地控制随机序列的生成过程,而不仅仅是它开始的位置。

pytorch自动微分

PyTorch中自动求导模块中的相关函数有torch.autograd.backward()和torch.autograd.grad()。下面逐一进行介绍。

  1. torch.autograd.backward()该函数实现自动求取梯度
torch.autograd.backward(tensors,
# Tensors:用于求导的张量,如loss。
                        grad_tensors=None,
# grad_tensors:多梯度权重,当有多个loss需要计算梯度时,需要设置每个loss的权值。
                        retain_graph=None,
# retain_graph:保存计算图,由于PyTorch采用动态图机制,在每次反向传播之后计算图都会释放掉,如果还想继续使用,就要设置此参数为True。
                        create_graph=False)
# create_graph:创建导数计算图,用于高阶求导

案例1:

import torch
w = torch.tensor([1.], requires_grad=True)
x = torch.tensor([2.], requires_grad=True)
a = torch.add(x, w)
b = torch.add(w, 1)
y = torch.mul(a, b)
# y = (x+w)*(w+1) = xw + x + w^2 + w
y.backward()
print(w.grad)#对w求导 = x + 2w + 1 = 5
# 输出:tensor([5.])

案例2:

import torch
w = torch.tensor([1.], requires_grad=True)
x = torch.tensor([2.], requires_grad=True)
a = torch.add(x, w)
b = torch.add(w, 1)
y0 = torch.mul(a, b)
# y0 = (x+w)*(w+1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值