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

torch.distributions.fishersnedecor 的源代码

# mypy: 允许未类型化定义
导入 火炬
来自 火炬 导入 纳尼, 张量
来自 torch.distributions 导入 约束
来自 torch.distributions.distribution 导入 分布
来自 torch.distributions.gamma 导入 伽马分布
来自 torch.distributions.utils 导入 广播全部
来自 torch 的类型 导入 , _大小


全部 = ["FisherSnedecor"]


[文档] 费舍尔-斯涅德科(分发): r""" 创建一个由 :attr:`df1` 和 :attr:`df2` 参数化的 Fisher-Snedecor 分布。 示例:: >>> # xdoctest: +IGNORE_WANT("非确定性") >>> m = FisherSnedecor(torch.tensor([1.0]), torch.tensor([2.0])) >>> m.sample() # df1=1 和 df2=2 的 Fisher-Snedecor 分布 tensor([0.2453]) 参数: df1(浮点数或 Tensor):自由度参数 1 df2(浮点数或 Tensor):自由度参数 2 """ 约束参数 = {"df1": 约束.正的, df2: 约束.正的} 支持 = 约束.正向 has_rsample = 真实 定义 __init__(自身, df1, df2, 验证参数=): 自身.df1, 自身.df2 = 广播全部(df1, df2) 自身._gamma1 = 伽马(自身.df1 * 0.5, 自身.df1) 自身.γάμμα2 = 伽马(自身.df2 * 0.5, 自身.df2) if isinstance(df1, ) isinstance(df2, ): 批量形状 = torch.尺寸() 否则: 批量形状 = 自身.df1.大小() 超级().__init__(批量形状, 验证参数=验证参数)
[文档] def expand(self, batch_shape, _instance=None): new = self._get_checked_instance(FisherSnedecor, _instance) batch_shape = torch.Size(batch_shape) new.df1 = self.df1.expand(batch_shape) new.df2 = self.df2.expand(batch_shape) new._gamma1 = self._gamma1.expand(batch_shape) new._gamma2 = self._gamma2.expand(batch_shape) super(FisherSnedecor, new).__init__(batch_shape, validate_args=False) new._validate_args = self._validate_args 返回 new
@property 定义
均值(自身) -> 张量: df2 = 自身.df2.克隆(内存格式=torch.连续格式) df2[df2 <= 2] = 纳尼 返回 df2 / (df2 - 2) @property 定义 模式(自身) -> 张量: 模式 = (self.df1 - 2) / self.df1 * self.df2 / (self.df2 + 2) 模式[self.df1 <= 2] = 纳尼 返回 模式 @property def 方差(自身) -> 张量: df2 = 自身.df2.克隆(内存格式=torch.连续格式) df2[df2 <= 4] = 纳尼 返回 ( 2 * df2.pow(2) * (自身.df1 + df2 - 2) / (自身.df1 * (df2 - 2).pow(2) * (df2 - 4)) )
[文档] def rsample(self, sample_shape: _size = torch.Size(())) -> Tensor: shape = self._extended_shape(sample_shape) # X1 ~ Gamma(df1 / 2, 1 / df1), X2 ~ Gamma(df2 / 2, 1 / df2) # Y = df2 * df1 * X1 / (df1 * df2 * X2) = X1 / X2 ~ F(df1, df2) X1 = self._gamma1.rsample(sample_shape).view(shape) X2 = self._gamma2.rsample(sample_shape).view(shape) tiny = torch.finfo(X2.dtype).tiny X2.clamp_(min=tiny) Y = X1 / X2 Y.clamp_(min=tiny) return Y
[文档] def log_prob(self, value): if self._validate_args: self._validate_sample(value) ct1 = self.df1 * 0.5 ct2 = self.df2 * 0.5 ct3 = self.df1 / self.df2 t1 = (ct1 + ct2).lgamma() - ct1.lgamma() - ct2.lgamma() t2 = ct1 * ct3.log() + (ct1 - 1) * torch.log(value) t3 = (ct1 + ct2) * torch.log1p(ct3 * value) return t1 + t2 - t3

© 版权所有 PyTorch 贡献者。

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

文档

查看 PyTorch 的全面开发者文档

查看文档

教程

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

查看教程

资源

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

查看资源