PyTorch 中的 `torch.random`

2025 年 3 月 28 日 | 阅读 6 分钟
`torch.random` in PyTorch

PyTorch 是一个广泛使用的深度学习库,以其灵活性和易用性而闻名。任何深度学习框架的一个关键组成部分是其生成随机数的能力,因为随机性在许多机器学习算法中扮演着重要的角色,包括权重初始化、数据增强和创建随机数据集。在 PyTorch 中,`torch.Random` 模块提供了用于生成随机数和张量的强大而灵活的工具。本综合指南将详细探讨 `torch.Random`,涵盖其语法、用法和实际应用。

1. 机器学习中随机性的介绍

随机性是机器学习的一个基本要素。它用于初始化神经网络的权重,确保模型每次都以不同的初始条件开始训练,这有助于找到更好的解决方案。随机性在数据增强中也很重要,其中创建训练数据的变体以使模型更健壮。此外,随机抽样技术用于创建训练和验证数据集,确保模型能够很好地泛化到未见数据。

2. 了解 `torch.Random` 的基础知识

PyTorch 中的 `torch.Random` 模块提供了一组用于生成随机数和 张量 的功能。它建立在 PyTorch 提供的随机数生成 (RNG) 基础上,确保随机数高效且有效地生成。

模块概述

`torch.Random` 模块包括用于生成随机数、随机张量以及从各种概率分布中抽样的功能。以下是常用功能的一个简要概述

  • `torch.manual_seed(seed)`: 设置生成随机数的种子。
  • `torch.rand(size)`: 返回一个张量,其中包含从编程语言 `[0, 1)` 上的均匀分布中提取的随机数。
  • `torch.randn(size)`: 返回一个张量,其中包含从均值为 `0` 且标准差为 `1` 的正态分布中提取的随机数。
  • `torch.randint(low, high, length)`: 返回一个张量,其中包含介于 `low`(包含)和 `high`(不包含)之间的随机整数。
  • `torch.randperm(n)`: 返回一个张量,其中包含从 `0` 到 `n-1` 的整数的随机排列。
  • `torch.bernoulli(input)`: 返回一个张量,其中包含来自伯努利分布的二元随机数(0 或 1),其概率由 `enter` 给出。

设置随机种子

设置随机种子对于机器学习实验中的可重复性至关重要。通过设置种子,您可以确保每次运行代码时,PyTorch 生成的随机数都相同,这对于调试和比较结果至关重要。

输出

 
tensor([[0.8823, 0.9150, 0.3829],
        [0.9593, 0.3904, 0.6009],
        [0.2566, 0.7936, 0.9408]])   

在这种情况下,设置随机种子可确保生成的随机张量在每次执行代码时都相同。

3. 生成随机数和张量

随机数生成

生成随机数是许多系统学习任务的基本要求。PyTorch 提供了几个从不同分布生成随机数的功能。

均匀分布

`torch.rand` 函数从区间 `[0, 1)` 上的均匀分布生成随机数。

输出

 
tensor([0.1283, 0.9454, 0.4685, 0.0220, 0.6028])   

正态分布

`torch.randn` 函数生成均值为 `0` 且标准差为 `1` 的正态分布的随机数。

输出

 
tensor([ 1.4304,  0.5286,  1.2507, -0.4382, -0.6622])   

创建随机张量

创建指定形状的随机张量对于初始化模型参数和为实验生成合成数据至关重要。

输出

 
tensor([[0.6118, 0.1743, 0.2414],
        [0.8265, 0.9350, 0.0137]])   

在此示例中,我们生成一个形状为 `(2, 3)` 的随机张量,其值是从编程语言 `[0, 1)` 上的均匀分布中提取的。

4. 高级随机张量生成

随机整数

`torch.randint` 特征在一定的范围内生成随机整数。这对于开发随机索引或标签等任务很有用。

输出

 
tensor([[3, 0, 6],
        [9, 6, 1],
        [4, 7, 7]])   

随机排列

`torch.randperm` 函数生成从 `0` 到 `n-1` 的整数的随机排列。这对于洗牌数据特别有用。

输出

 
tensor([4, 1, 3, 0, 7, 5, 9, 6, 8, 2])   

从分布中随机抽样

PyTorch 提供了从众多可能的分布中抽样随机数的功能,包括伯努利、二项式和泊松分布。

伯努利分布

`torch.bernoulli` 特征根据给定的可能性生成二元随机数(0 或 1)。

输出

 
tensor([1., 0., 1., 1., 0.])   

二项分布

要从二项分布中生成随机数,您可以使用 `torch.distributions.binomial` 类。

输出

 
tensor([4., 6., 5., 4., 5.])   

5. 在深度学习中的实际应用

权重初始化

神经网络权重的随机初始化对于训练 深度学习 模型至关重要。适当的初始化可以导致更快的收敛和更好的性能。

输出

 
Parameter containing:
tensor([[ 0.3434, -0.4719, -0.0211,  0.1875,  0.4873,  0.3495, -0.0533, -0.1634,
          0.0655, -0.3181],
        [-0.0045, -0.3325,  0.1113,  0.3620,  0.3754, -0.0794,  0.3390,  0.1526,
         -0.0078,  0.3646],
        [ 0.2043, -0.2912, -0.0131, -0.2122,  0.0861, 

 0.3552,  0.3156, -0.2478,
         -0.2655, -0.0415],
        [-0.1813,  0.1827, -0.0931,  0.0123, -0.0154,  0.1765,  0.2621,  0.0561,
          0.4094, -0.1801],
        [-0.0837, -0.2561,  0.4126,  0.1541,  0.0220,  0.3250,  0.1158,  0.3265,
         -0.0341,  0.2255]], requires_grad=True)   

在这种情况下,我们使用 Xavier 初始化初始化线性层的权重,确保权重是从合适的分布中提取的。

数据增强

随机修改通常用于增强事实以提高模型的鲁棒性。在这里,我们展示了应用随机更改到照片的方式。

在此示例中,我们定义了一个随机水平翻转和随机旋转变换来增强数据集。

创建随机数据集

随机抽样用于从更大的数据集中创建训练和验证数据集。

输出

 
Number of training samples: 800
Number of validation samples: 200   

在这种情况下,我们创建一个人工数据集,并使用随机抽样将其分成培训和验证集。

6. 最佳实践和性能考虑因素

使用适当的种子管理

通过为所有随机数生成器设置种子来确保可重复性,包括 PyTorch、NumPyPython 的随机模块。```python

优化随机操作

对于大规模张量运算,请考虑使用 PyTorch 的内置函数,这些函数针对性能进行了优化。

利用 GPU 进行随机操作

如果您可以使用 GPU,请使用它来加速随机数生成和其他张量运算。

7. 结论

PyTorch 中的 `torch.Random` 模块提供了一套用于生成随机数和张量的综合工具,这对于许多系统掌握任务至关重要。通过了解其功能和应用,您可以正确地在深度学习模型中利用随机性,用于权重初始化、数据增强和开发随机数据集。

在本指南中,我们探讨了 `torch.Random` 的基础知识,其中包括设置种子、生成随机数和张量以及高级随机张量生成策略。我们还测试了实用的深度学习应用程序,并讨论了可重复性和整体性能优化的良好实践。

通过利用这些资源,您可以增强您的技能并有效地使用 `torch.Random` 模块来构建强大而高效的深度学习模型。