PyTorch学习笔记(五)

3.随机值生成函数

3.1 torch.bernouli()函数

torch.bernoulli() 是 PyTorch 中的一个函数,它用于生成符合伯努利分布的随机数。伯努利分布是一个离散型概率分布,描述了一个随机变量只有两种可能的结果:0 或 1。

torch.bernoulli() 的基本语法如下:

python 复制代码
torch.bernoulli(input, generator=None, out=None)

参数:

  • input:一个张量,其中每个元素都表示伯努利分布的成功概率。这个张量应该包含介于 0 和 1 之间的值。
  • generator:一个可选的伪随机数生成器。
  • out:一个可选的输出张量。

返回值:

  • 一个与输入张量形状相同的张量,其中每个元素都是根据对应输入概率从伯努利分布中随机生成的 0 或 1。

示例:

python 复制代码
import torch

# 创建一个张量,其中包含伯努利分布的成功概率
probabilities = torch.tensor([0.1, 0.5, 0.9])

# 使用 torch.bernoulli() 生成随机数
samples = torch.bernoulli(probabilities)

print(samples)

输出可能是:

python 复制代码
tensor([0., 0., 1.])

在这个示例中,我们创建了一个包含三个元素的张量 probabilities,每个元素都表示伯努利分布的成功概率。然后,我们使用 torch.bernoulli() 生成了一个与 probabilities 形状相同的张量 samples,其中每个元素都是根据对应概率从伯努利分布中随机生成的 0 或 1。

3.2 torch.cauchy() 函数

torch.cauchy() 是 PyTorch 中用于生成服从柯西分布(Cauchy distribution)的随机样本的函数。与 torch.cauchy_() 不同,torch.cauchy() 不会修改任何已存在的张量,而是返回一个新的张量,其中包含从柯西分布中抽取的随机样本。

函数的基本使用格式如下:

python 复制代码
torch.cauchy(median=0, scale=1, size=None, out=None)

参数解释:

  • median(中位数):柯西分布的位置参数,它决定了分布的中心位置。默认值为 0。
  • scale(尺度):柯西分布的尺度参数,它决定了分布的宽度或分散程度。默认值为 1。
  • size:输出张量的形状。可以是一个整数或一个整数元组,用于指定生成的张量的维度。
  • out:一个可选参数,用于指定输出的张量。如果提供了这个参数,函数将直接在 out 中填充结果,并返回 out。

柯西分布是一个连续型概率分布,其特点是具有长长的"尾巴",这意味着它经常会产生远离均值的极端值。在数学上,柯西分布是由中位数(位置参数)和尺度参数定义的。

示例:

python 复制代码
import torch  
  
# 生成一个形状为 (3,) 的一维张量,其中的元素来自柯西分布  
# 中位数为 0,尺度为 1  
tensor = torch.cauchy(median=0, scale=1, size=(3,))  
print(tensor)

输出将是一个形状为 (3,) 的一维张量,其中的元素是从中位数为 0、尺度为 1 的柯西分布中随机抽取的。每次运行这段代码时,由于随机性,输出的具体值可能会有所不同。

如果你想要直接修改一个已存在的张量而不是创建一个新的张量,你可以使用 torch.cauchy_() 函数,它会将结果直接填充到提供的 out 参数中(如果提供了的话)。但在大多数情况下,使用 torch.cauchy() 就足够了,因为它会返回一个新的张量,不会影响到其他张量。

3.3 torch.exponential()函数

在PyTorch中,torch.exponential() 函数用于生成具有指数分布的随机数。指数分布是一种连续概率分布,通常用于描述事件发生之间的时间间隔,如无线电波的到达时间间隔。

torch.exponential() 的函数签名如下:

python 复制代码
torch.exponential(lambda=1.0, size=None, *, generator=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) → Tensor

参数说明:

  • lambda:指数分布的率参数(rate parameter),即平均发生率的倒数。默认为1.0。
  • size:输出张量的大小。例如,size=(3, 4) 会生成一个3行4列的二维张量。
  • generator:用于生成随机数的生成器。
  • out:可选参数,输出张量。
  • dtype:返回张量的数据类型。
  • layout:返回张量的内存布局。
  • device:返回张量所在的设备。
  • requires_grad:如果设置为True,则返回的张量将需要梯度,用于计算梯度
python 复制代码
import torch

# 生成一个形状为 (2, 3) 的张量,其中的元素服从 λ=2 的指数分布
tensor = torch.exponential(lambda=2, size=(2, 3))

print(tensor)

执行这段代码会输出一个形状为 (2, 3) 的张量,其中的每个元素都是从 λ=2 的指数分布中随机抽取的。

3.4 torch.normal()

python 复制代码
torch.normal(mean, std, *, size=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=Fal

在PyTorch中,torch.normal 函数用于生成满足正态(高斯)分布的随机数。这个函数有几个参数,下面是它们的详细说明:

  • mean (均值,float类型,可选) - 生成的正态分布的均值。默认值为0。

  • std (标准差,float类型,可选) - 生成的正态分布的标准差。默认值为1。

  • size (张量形状,tuple[int]类型,可选) - 输出张量的形状。例如,size=(3,) 会生成一个包含3个随机数的1维张量,size=(2, 3) 会生成一个2x3的2维张量。如果不指定,则默认生成一个标量(即一个随机数)。

  • out (输出张量,Tensor类型,可选) - 可选参数,用于指定输出张量。如果提供了这个参数,函数将在这个张量上就地执行操作并返回它。

    * dtype (数据类型,torch.dtype类型,可选) - 输出张量的数据类型。默认使用torch.float32。

  • device (设备,torch.device类型,可选) - 输出张量所在的设备(例如,CPU或GPU)。默认使用当前默认设备。

  • requires_grad (是否需要梯度,bool类型,可选) - 如果设置为True,则生成的张量将需要计算梯度,这对于构建计算图以进行自动微分是有用的。默认值为False。

这里是一个torch.normal的使用示例,展示了如何使用不同的参数:

python 复制代码
import torch

# 生成一个标量随机数,均值为0,标准差为1
scalar = torch.normal()
print(scalar)

# 生成一个包含5个随机数的1维张量,均值为0,标准差为1
vector = torch.normal(mean=0, std=1, size=(5,))
print(vector)

# 生成一个2x3的2维张量,均值为3,标准差为2
matrix = torch.normal(mean=3, std=2, size=(2, 3))
print(matrix)

# 指定输出张量的数据类型和设备
tensor = torch.normal(mean=1, std=0.5, size=(4,), dtype=torch.float64, device='cuda')
print(tensor)

# 在一个已有的张量上就地生成随机数
output = torch.empty(3, dtype=torch.float32)
torch.normal(mean=0.5, std=1.5, out=output)
print(output)

请注意,torch.normal 函数默认生成满足标准正态分布的随机数(均值为0,标准差为1)。你可以通过调整mean和std参数来改变这些参数的值。此外,你还可以通过size参数来指定输出张量的形状。

3.5 torch.rand()

torch.rand 函数的签名如下:

python 复制代码
torch.rand(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)

下面是各个参数的详细解释:

  • *size (int... or Tuple[int]..., optional): 输出张量的形状。这是一个整数或者整数元组,用于定义输出张量的维度。如果不指定,将返回一个标量(即0维张量)。

  • out (Tensor, optional): 输出张量。如果提供,函数将在这个张量上就地执行操作并返回它。这个张量必须具有与期望输出形状兼容的形状。

  • dtype (torch.dtype, optional): 返回张量的数据类型。如果未指定,将使用当前默认数据类型(torch.get_default_dtype())。

  • layout (torch.layout, optional): 返回张量的内存布局。默认为 torch.strided。

  • device (torch.device, optional): 返回张量所在的设备。默认为当前设备(torch.device('cuda' if torch.cuda.is_available() else 'cpu'))。

  • requires_grad (bool, optional): 如果设置为 True,则生成的张量将需要计算梯度,这对于自动微分是必需的。默认为 False。

torch.rand 函数用于生成满足均匀分布 (U(0, 1)) 的随机数,即每个随机数都是在0和1之间(包含0但不包含1)均匀分布的。size 参数用于指定输出张量的形状,而其他参数如 dtype、device 和 requires_grad 则用于控制输出张量的其他属性。

以下是一个使用 torch.rand 的简单示例:

python 复制代码
import torch

# 生成一个形状为 (2, 3) 的张量,元素来自均匀分布 U(0, 1)
tensor = torch.rand(2, 3)
print(tensor)

# 生成一个标量(0维张量)
scalar = torch.rand()
print(scalar)

# 指定数据类型和设备
tensor_on_gpu = torch.rand(5, 5, dtype=torch.float64, device='cuda')
print(tensor_on_gpu)

# 在一个已有的张量上就地生成随机数
output = torch.empty(4, 4)
torch.rand(4, 4, out=output)
print(output)

在这个示例中,torch.rand 被用来生成不同形状和属性的张量。通过使用 out 参数,可以在一个已存在的张量上就地生成随机数,覆盖原有的数据。

3.6 torch.rand 函数

torch.randn 函数的签名如下:

python 复制代码
torch.randn(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)

这里是每个参数的说明:

  • *size (int... or Tuple[int]..., optional): 输出张量的形状。这是一个整数序列或者整数元组,用于定义输出张量的维度。如果不指定,将返回一个标量(即0维张量)。
  • out (Tensor, optional): 输出张量。如果提供,函数将在这个张量上就地执行操作并返回它。这个张量必须具有与期望输出形状兼容的形状。
  • dtype (torch.dtype, optional): 返回张量的数据类型。如果未指定,将使用默认的浮点数据类型(通常是 torch.float32)。
  • layout (torch.layout, optional): 返回张量的内存布局。默认为 torch.strided。
  • device (torch.device, optional): 返回张量所在的设备。默认为当前设备(torch.device('cuda' if torch.cuda.is_available() else 'cpu'))。
  • requires_grad (bool, optional): 如果设置为 True,则生成的张量将需要计算梯度,这对于自动微分是必需的。默认为 False。

torch.randn 函数用于生成满足标准正态分布(均值为0,标准差为1)的随机数。输出张量的形状由 size 参数指定。与 torch.rand 不同,torch.randn 生成的是正态分布的随机数,而不是均匀分布的随机数。

下面是一个使用 torch.randn 的简单示例:

python 复制代码
import torch

# 生成一个形状为 (2, 3) 的张量,元素来自标准正态分布 N(0, 1)
tensor = torch.randn(2, 3)
print(tensor)

# 生成一个标量(0维张量)
scalar = torch.randn()
print(scalar)

# 指定数据类型和设备
tensor_on_gpu = torch.randn(5, 5, dtype=torch.float64, device='cuda')
print(tensor_on_gpu)

# 在一个已有的张量上就地生成随机数
output = torch.empty(4, 4)
torch.randn(4, 4, out=output)
print(output)

在这个示例中,torch.randn 被用来生成不同形状和属性的张量。通过使用 out 参数,可以在一个已存在的张量上就地生成随机数,覆盖原有的数据。

相关推荐
L_cl1 分钟前
Python学习从0到1 day28 Python 高阶技巧 ⑧ 递归
学习
vortex519 分钟前
Vim 编辑器学习笔记
学习·编辑器·vim
源于花海22 分钟前
论文学习(四) | 基于数据驱动的锂离子电池健康状态估计和剩余使用寿命预测
论文阅读·人工智能·学习·论文笔记
心怀梦想的咸鱼25 分钟前
Ue5 umg学习(一)
学习·ue5
楚疏笃26 分钟前
鸿蒙学习生态应用开发能力全景图-开发者支持平台(5)
学习·华为·harmonyos
4v1d26 分钟前
边缘计算的学习
人工智能·学习·边缘计算
L Jiawen38 分钟前
【Python · PyTorch】卷积神经网络(基础概念)
pytorch·python·cnn
B20080116刘实2 小时前
CTF攻防世界小白刷题自学笔记13
开发语言·笔记·web安全·网络安全·php
这个男人是小帅3 小时前
【GAT】 代码详解 (1) 运行方法【pytorch】可运行版本
人工智能·pytorch·python·深度学习·分类
xiaoyaolangwj3 小时前
高翔【自动驾驶与机器人中的SLAM技术】学习笔记(十三)图优化SLAM的本质
学习·机器人·自动驾驶