• 文档 >
  • 模块代码 >
  • torch >
  • torch.quasirandom
快捷键

torch.quasirandom 的源代码

# mypy: 允许未类型化定义
from 打字 导入 可选

导入 火炬


[文档] Sobol 引擎: r"" The :class:`torch.quasirandom.SobolEngine` 是一个用于生成 随机化 Sobol 序列。Sobol 序列是低维随机化序列的一个例子。 差异准随机序列。 这个 Sobol 序列引擎的实现能够 采样序列最多达到 21201 维。它使用方向 从 https://web.maths.unsw.edu.au/~fkuo/sobol/获取的数字 搜索条件 D(6)至维度 21201。这是推荐 作者的选择。 参考文献: 艺术家 B.欧文。Sobol 和 Niederreiter-Xing 点的打乱 《复杂性杂志》,第 14 卷第 4 期,第 466-489 页,1998 年 12 月 I. M. Sobol. 立方体内点的分布和积分的精确评估 评估 中. 数值计算与数学物理,7:784-802,1967. 参数: 维度(Int):要抽取的序列的维度 打乱(bool,可选):将此设置为 ``True`` 将生成 打乱的 Sobol 序列。打乱是 能够生成更好的 Sobol 序列。默认:``False``。 种子(Int,可选):这是打乱顺序的种子。种子 随机数生成器的设置为此 如果指定,则使用随机种子。否则,使用随机种子。 默认:`None` 示例: >>> # xdoctest: +SKIP("未设置随机状态") >>> soboleng = torch.quasirandom.SobolEngine(dimension=5) >>> soboleng.draw(3) tensor([[0.0000, 0.0000, 0.0000, 0.0000, 0.0000], [0.5000, 0.5000, 0.5000, 0.5000, 0.5000], [0.7500, 0.2500, 0.2500, 0.2500, 0.7500]]) """ MAXBIT = 30 MAXDIM = 21201 定义 __init__(self, 维度, 打乱=False, 种子=): 如果 尺度 > self.MAX 尺度 或者 尺度 < 1: 抛出 值错误( "支持的维度范围" f"for SobolEngine is [1, "{self.MAXDIM}]" ) self.种子 = 种子 self.混乱 = 混乱 self.维度 = 维度 cpu = 火炬.设备("cpu") self.蒙特卡洛状态 = 火炬.零值( 维度, self.最大比特数, 设备=cpu, 数据类型=火炬.长的 ) 火炬._sobol 引擎初始化状态_(self.sobol 状态, self.维度) 如果 not self.打乱: self.转换 = 火炬.零值(self.维度, 设备=cpu, 数据类型=火炬.) 否则: self.混乱() self.准似 = self.转移.克隆(内存格式=火炬.连续格式) self._第一个要点 = (self.几乎 / 2**self.MAXBIT).重塑(1, -1) self.已生成数量 = 0
[文档] 定义 绘制( self, n: 整型 = 1, : 可选[火炬.张量] = , 数据类型: 可选[火炬.数据类型] = , ) -> 火炬.张量: r"" 函数用于从 Sobol 序列中绘制一个由:attr:`n`个点组成的序列。 请注意,样本依赖于前面的样本。大小 结果为:(n, 维度)。 参数: n(Int,可选):绘制点序列的长度。 默认:1 输出(张量,可选):输出张量 dtype(:class:`torch.dtype`,可选):返回张量的期望数据类型 默认值:``None`` """ 如果 dtype : dtype = 火炬.获取默认数据类型() 如果 self.生成数量 == 0: 如果 n == 1: 结果 = self._第一个点.(数据类型) 否则: 结果, self.准似 = 火炬._索布尔引擎绘图( self.准似, n - 1, self.索布尔状态, self.尺度, self.生成的数量, 数据类型=数据类型, ) 结果 = 火炬.((self.第一个点.(数据类型), 结果), 维度=-2) 否则: 结果, self.准似 = 火炬._Sobol_引擎绘制( self.准似, n, self.Sobol 状态, self.维度, self.生成数量 - 1, 数据类型=数据类型, ) self.生成数量 += n 如果 外部 not : .调整大小为_(结果).复制_(结果) 返回 外部 返回 结果
[文档] def 绘制基础 2( self, m: 整数类型, out: Optional[torch.Tensor] = None, dtype: Optional[torch.dtype] = None, ) -> torch.Tensor: r""" 绘制从 Sobol 序列中生成的 :attr:`2**m` 个点的序列的函数。 注意,样本依赖于前面的样本。结果的大小为 :math:`(2**m, dimension)`。 结果的大小为 :math:`(2**m, dimension)`。 Args: m (Int): 要绘制的点数的(二进制)指数。 out (Tensor, optional): 输出张量 dtype (:class:`torch.dtype`, optional): 所需的数据类型 返回张量。 默认:无 ```python # 输入文本 input_text = '"""' # 翻译函数(此处为示例,实际翻译功能需调用真实的翻译 API) def translate_to_simplified_chinese(text): # 假设的翻译结果 return text # 输出翻译结果 translated_text = translate_to_simplified_chinese(input_text) print(translated_text) ``` n = 2 的 m 次方 total_n = self.num_generated + n if not (total_n & (total_n - 1) == 0): raise ValueError( "Sobol'点的平衡性质要求" n 要成为 2 的幂。已经生成了{self.num_generated}个点。 如果之前已经生成,那么:n={self.num_generated}+2**{m}={total_n}。 "如果您仍然想这样做,请使用" "'SobolEngine.draw()'代替。" ) return self.draw(n=n, out=out, dtype=dtype)
[文档] def reset(self): r""" 重置 ``SobolEngine`` 到基本状态的函数。 "" self.quasi.copy_(self.shift) self.num_generated = 0 返回自身
[文档] def fast_forward(self, n): r""" 快速前进 `SobolEngine` 状态的函数 attr:`n` 步骤。这相当于绘制 :attr:`n` 个样本 不使用样本。 Args: n (Int): 快进步数的数量。 """ 如果 self.num_generated 等于 0: torch._sobol_engine_ff_( self.quasi, n - 1, self.sobolstate, self.dimension, self.num_generated ) else: torch._sobol_engine_ff_( self.quasi, n, self.sobolstate, self.dimension, self.num_generated - 1 ) self.num_generated += n return self
定义 _scramble(self): g: 可选
[火炬.生成器] = 如果 self.种子 not : g = 火炬.生成器() g.手动播种(self.种子) cpu = 火炬.设备("cpu") 生成平移向量 平移整数 = 火炬.randint( 2, (self.尺度, self.MAXBIT), 设备=cpu, 生成器=g ) self.移位 = 火炬.mv( shift_ints, 火炬.pow(2, 火炬.arange(0, self.MAXBIT, 设备=cpu)) ) 生成下三角矩阵(沿维度堆叠) ltm_dims = (self.维度, self.MAXBIT, self.MAXBIT) ltm = 火炬.randint(2, 长度维度, 设备=cpu, 生成器=g).三角() 火炬._Sobol_引擎_打乱_(self.随机状态, ltm, self.维度) 定义 __repr__(self): 格式化字符串 = [f"维度="{self.维度}"] 如果 self.打乱: 格式化字符串 += [scramble=True] 如果 self.种子 not : 格式化字符串 += [fseed={self.种子}"] 返回 self..__name__ + “(” + “,”.连接(格式化字符串) + “)”

© 版权所有 PyTorch 贡献者。

使用 Sphinx 构建,并使用 Read the Docs 提供的主题。

文档

PyTorch 的全面开发者文档

查看文档

教程

深入了解初学者和高级开发者的教程

查看教程

资源

查找开发资源,获取您的疑问解答

查看资源