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

torch.distributions.distribution 的源代码

# mypy: 允许未类型化定义
导入 警告
来自 打字 导入 可选
来自 typing_extensions 导入 已弃用

导入 火炬
来自 火炬 导入 张量
来自 torch.distributions 导入 约束
来自 torch.distributions.utils 导入 懒属性
来自 torch 的类型 导入 _大小


全部 = [分布式]


[文档] 分发: r""" 分布是概率分布的抽象基类。 "沉浸式翻译" has_rsample = 支持枚举 = 验证参数 = __debug__
[文档] @静态方法 def set_default_validate_args(value: bool) -> None: """ 设置是否启用或禁用验证。 默认行为模仿 Python 的 ``assert`` 语句:验证 默认开启,但在以优化模式运行 Python 时被禁用 (通过 ``python -O``)。验证可能很昂贵,所以你可能想 禁用模型工作后。 参数: value (bool): 是否启用验证。 ```python # 输入文本 input_text = '"""' # 翻译函数(此处为示例,实际翻译功能需调用真实的翻译 API) def translate_to_simplified_chinese(text): # 假设的翻译结果 return text # 输出翻译结果 translated_text = translate_to_simplified_chinese(input_text) print(translated_text) ``` 如果 value 不在 [True, False] 中: 引发 ValueError Distribution._validate_args = 值
定义 __init__( , 批量形状
: torch.大小 = torch.尺寸(), 事件形状: torch.大小 = torch.尺寸(), 验证参数: 可选[bool] = , ): self.批次形状 = 批量形状 self.事件形状 = 事件形状 如果 验证参数 不是 : self.验证参数 = 验证参数 如果 self._validate_args: 尝试: 约束参数 = self.约束参数 除了 不支持的操作异常: 约束参数 = {} 警告.警告( f"{self.}未定义 `arg_constraints`。 + "请设置 `arg_constraints = "{}` 或初始化分布 "` + 使用 `validate_args=False` 来关闭验证。 ) for 参数, 约束 参数约束.项目(): 如果 约束.是否依赖(约束): continue # 跳过无法检查的约束 如果 参数 不是 self.字典 isinstance( getattr(类型(self), 参数), 懒加载属性 ): continue # 跳过检查懒构建的参数 = getattr(self, 参数) 有效的 = 约束.查看() 如果 不是 torch.全部为真(有效的): 抛出 值错误( f预期参数{参数} " f“(”{类型().__name__}形状的{元组(.形状)}) f分布的{表示()} " f满足约束的{表示(约束)}," f"但是发现无效的值:"输入文本翻译为简体中文为:\n{}" ) 超级().__init__()
[文档] def expand(self, batch_shape: _size, _instance=None): """ 返回一个新的分布实例(或填充现有的实例) 由派生类提供()将批量维度扩展到 `batch_shape`. 此方法调用 :class:`~torch.Tensor.expand` 方法 该发行版的参数。因此,这不会分配新的 内存用于扩展分布实例。此外, 这不会重复任何参数检查或参数广播 `__init__.py`,当实例首次创建时。 参数: batch_shape (torch.Size):期望的扩展大小。 _instance:由子类提供的新实例,需要重写 `.expand`。 需要重写 `.expand` 的。 返回: 新的分布实例,批量维度扩展到 `批量大小`。 “” 抛出未实现异常
@property def 批量形状
() -> torch.尺寸: """ 返回参数批处理的形状。 "沉浸式翻译" 返回 自身._batch_shape @property 定义 event_shape(自身) -> torch.尺寸: """ 返回单个样本的形状(不包含批处理)。 "沉浸式翻译" 返回 自身.事件形状 @property 定义 参数约束(自身) -> 字典[str, 约束.约束] """ 返回一个从参数名称到 class:`~torch.distributions.constraints.Constraint` 对象的字典,其中 应由该分布的每个参数满足。不需要出现在此字典中的非张量参数。 不需要出现在此字典中。 "沉浸式翻译" 抛出 未实现异常 @property 定义 支持(自身) -> 可选[约束.约束] """ 返回一个代表此分布支持范围的 :class:`~torch.distributions.constraints.Constraint` 对象。 表示此分布的支持范围。 "沉浸式翻译" 抛出 未实现异常 @property 定义 均值(自身) -> 张量: """ 返回分布的平均值。 "沉浸式翻译" 抛出 未实现异常 @property 定义 模式(self) -> 张量: """ 返回分布的模式。 "沉浸式翻译" 抛出 不支持的操作异常(f"{self.}未实现模式") @property def 方差(self) -> 张量: """ 返回分布的方差。 "沉浸式翻译" 抛出 未实现异常 @property def 标准差(self) -> 张量: """ 返回分布的标准差。 "沉浸式翻译" 返回 self.方差.平方根()
[docs] def sample(self, sample_shape: _size = torch.Size()) -> Tensor: [docs] def sample(self, sample_shape: _size = 火炬.Size()) -> 火炬.Tensor: ```python # 输入文本 input_text = '"""' # 翻译函数(此处为示例,实际翻译功能需调用真实的翻译 API) def translate_to_simplified_chinese(text): # 假设的翻译结果 return text # 输出翻译结果 translated_text = translate_to_simplified_chinese(input_text) print(translated_text) ``` 生成一个形状为 sample_shape 的样本或形状为 sample_shape 的批次 样本如果分布参数被批处理。 """ 使用 torch.no_grad(): 返回 self.rsample(sample_shape)
[docs] def rsample(self, sample_shape: _size = torch.Size()) -> Tensor: """ 生成形状为 sample_shape 的重新参数化样本或 sample_shape 形状的重新参数化样本批次,如果分布参数 批量处理。 """ 抛出未实现异常。
[文档] @弃用( "`sample_n(n)` 将被弃用。请使用 `sample((n,))` 代替。", category=FutureWarning, ) def sample_n(self, n: int) -> Tensor: "" 生成 n 个样本或 n 批样本,如果分布参数是批量的。 分布参数批量处理。 "" return self.sample(torch.Size((n,)))
[文档] def log_prob(self, value: Tensor) -> Tensor: """ 返回在 n 个维度上评估的概率密度/质量函数的对数 `值`. Args: value (张量): """ 引发未实现错误
[文档] def cdf(self, value: 张量) -> 张量: ```python # 输入文本 input_text = '"""' # 翻译函数(此处为示例,实际翻译功能需调用真实的翻译 API) def translate_to_simplified_chinese(text): # 假设的翻译结果 return text # 输出翻译结果 translated_text = translate_to_simplified_chinese(input_text) print(translated_text) ``` 返回在指定点评估的累积密度/质量函数 `值`. Args: value (张量): """ 抛出未实现异常
[文档] def icdf(self, value: Tensor) -> Tensor: """ 返回在给定值处评估的逆累积分布/质量函数 `值`. Args: value (张量): """ 抛出未实现异常
[文档] def enumerate_support(self, expand: bool = True) -> Tensor: """ 返回包含所有离散值支持的张量 分布。结果将遍历维度 0,因此形状 结果将是 `(cardinality,) + batch_shape + event_shape` (其中 `event_shape = ()` 用于一元分布)。 请注意,这将在锁定步骤中枚举所有批处理张量 `[[0, 0], [1, 1], ...]` 在 `expand=False` 的情况下进行枚举 沿着第 0 维,但剩余的批次维度为 单例维度,`[[0], [1], ..`. 遍历完整笛卡尔积 itertools.product(m.enumerate_support()) 参数: expand (bool): 是否扩展支持范围 批维度与分布的 `batch_shape` 匹配。 返回: 张量遍历维度 0。 ```python # 输入文本 input_text = '"""' # 翻译函数(此处为示例,实际翻译功能需调用真实的翻译 API) def translate_to_simplified_chinese(text): # 假设的翻译结果 return text # 输出翻译结果 translated_text = translate_to_simplified_chinese(input_text) print(translated_text) ``` 引发未实现错误
[文档] def entropy(self) -> Tensor: """ 返回分布的熵,批处理在 batch_shape 上。 返回: 批量形状的张量。 """ 抛出未实现异常。
[文档] def perplexity(self) -> 张量: "``" 返回分布的困惑度,批处理在 batch_shape 上。 返回: 形状为 batch_shape 的张量。 ```python # 输入文本 input_text = '"""' # 翻译函数(此处为示例,实际翻译功能需调用真实的翻译 API) def translate_to_simplified_chinese(text): # 假设的翻译结果 return text # 输出翻译结果 translated_text = translate_to_simplified_chinese(input_text) print(translated_text) ``` 返回 torch.exp(self.熵())
def _扩展形状
(self, 样本形状: _大小 = torch.尺寸()) -> torch.尺寸: """ 返回分布返回的样本的大小 一个 `sample_shape`。注意,实例的批量和事件形状在构造时是固定的。如果为空,则返回的形状提升为(1,)。 如果为空,则返回的形状提升为(1,)。 sample_shape(torch.Size):要抽取的样本的大小。 参数: sample_shape(torch.Size):要抽取的样本的大小。 "沉浸式翻译" 如果 不是 isinstance(样本形状, torch.尺寸): 样本形状 = torch.尺寸(样本形状) 返回 torch.尺寸(样本形状 + ._batch_shape + ._event_shape) def _validate_sample(, : 张量) -> : """ 分布方法的参数验证,例如 `log_prob` `cdf` 和 `icdf`。要计算的值的右侧维度 通过这些方法得出的分数必须与分布的批次一致 并且事件形状。 参数: value(张量):要计算对数概率的张量 通过`log_prob`方法计算得出。 抛出异常。 ValueError:当`value`的最右侧维度与分布的批量和事件形状不匹配时。 抛出异常。 "沉浸式翻译" 如果 不是 isinstance(, torch.张量): 抛出 值错误("log_prob 的值参数必须是一个张量") 事件维度起始 = 长度(.尺寸()) - 长度(自身._事件形状) 如果 .尺寸()[事件维度起始] != 自身.事件形状: 抛出 值错误( f值的最右侧大小必须与 event_shape 匹配:{.大小()} vs {自身.事件形状} ) 实际形状 = .大小() 预期形状 = 自身._批次形状 + 自身._事件形状 for i, j zip(反转(实际形状), 反转(预期形状)): 如果 i != 1 j != 1 i != j: 抛出 值错误( f"值不能与 batch_shape+event_shape 广播:{实际形状}与...{预期形状} ) 尝试: 支持 = 自身.支持 除了 不支持的操作异常: 警告.警告( f"{自身.}未定义 `support` 以启用 " + "请初始化分布以进行样本验证。" + `validate_args=False` 关闭验证。 ) 返回 断言 支持 不是 有效 = 支持.检查() 如果 不是 torch.全部为真(有效): 抛出 值错误( 预期值参数 f“(”{类型().__name__}形状的{元组(.形状)}) f“在分布的支持范围内(”{表示(支持)}) f“的分布中(”{表示(自身)}," f"但发现无效值:"输入文本翻译为简体中文为:\n{}" ) 定义 _get_checked_instance(自身, , _instance=): 如果 _instance 类型(自身).__init__ != .__init__: 抛出 不支持的操作异常( f子类{..__name__}{.__name__}定义一个自定义的 __init__ 方法的 "必须还要定义一个自定义的 .expand() 方法。" ) 返回 .__new__(类型()) 如果 _实例 否则 _实例 定义 __repr__() -> str: 参数名称 = [k for k, _ .参数约束.项目() 如果 k .字典] 参数字符串 = “,”.连接( [ f"{p}: {.字典[p] 如果 self.字典[p].元素数量() == 1 否则 self.字典[p].尺寸()}" for p 参数名称 ] ) 返回 self..__name__ + “(” + 参数字符串 + “)”

© 版权所有 PyTorch 贡献者。

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

文档

查看 PyTorch 的全面开发者文档

查看文档

教程

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

查看教程

资源

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

查看资源