torch.distributions.beta 的源代码
# mypy: 允许未类型化定义
导入
火炬
来自
火炬
导入
张量
来自 torch.distributions
导入
约束
来自 torch.distributions.dirichlet
导入 Dirichlet
来自 torch.distributions.exp_family
导入
指数族
来自 torch.distributions.utils
导入
广播全部
来自
torch 的类型
导入
_数字,
_大小
全部 = ["Beta"]
[文档]
类
测试版(
指数族):
r""
由 :attr:`concentration1` 和 :attr:`concentration0` 参数化的贝塔分布。
示例::
>>> # xdoctest: +IGNORE_WANT("非确定性")
>>> m = Beta(torch.tensor([0.5]), torch.tensor([0.5]))
>>> m.sample() # 贝塔分布,参数为 concentration concentration1 和 concentration0
tensor([ 0.1046])
参数:
浓度 1(浮点数或张量):分布的第 1 个浓度参数
(通常称为 alpha)
浓度 0(浮点数或张量):分布的第 2 个浓度参数
(通常称为 beta)
"沉浸式翻译"
约束参数 = {
浓度 1:
约束.
正面,
浓度 0:
约束.
正面,
}
支持 =
约束.
单位区间
has_rsample = 真实
def __init__(self, concentration1, concentration0, validate_args=无):
如果 isinstance(
浓度 1,
_数字)
和 isinstance(
浓度 0,
_数字):
浓度 1_浓度 0 = torch.
张量(
[float(浓度 1), float(
浓度 0)]
)
否则:
浓度 1,
集中 0 = broadcast_all(
集中 1,
集中 0
)
集中 1_集中 0 = torch.
栈(
[浓度 1,
浓度 0
] -1
)
self._狄利克雷 =
Dirichlet 分布(
浓度 1_浓度 0,
验证参数=
验证参数
)
超级().__init__(self._dirichlet._batch_shape,
验证参数=
验证参数)
[文档] def expand(self, batch_shape, _instance=None):
new = self._get_checked_instance(Beta, _instance)
batch_shape = torch.Size(batch_shape)
new._dirichlet = self._dirichlet.expand(batch_shape)
super(Beta, new).__init__(batch_shape, validate_args=False)
new._validate_args = self._validate_args
返回新的
@property
def 均值(self) ->
张量:
返回 self.
浓度 1 / (self.
浓度 1 + self.
浓度 0)
@property
def 模式(self) ->
张量:
返回 self.
迪利克雷.
模式[..., 0]
@property
def 方差(self) ->
张量:
总计 = self.
浓度 1 + self.
浓度 0
返回 self.
浓度 1 * self.
浓度 0 / (
总计.pow(2) * (
总计 + 1))
[文档] def rsample(self, sample_shape: _size = ()) -> Tensor:
return self._dirichlet.rsample(sample_shape).select(-1, 0)
[文档] def log_prob(self, value):
if self._validate_args:
self._validate_sample(value)
heads_tails = torch.stack([value, 1.0 - value], -1)
return self._dirichlet.log_prob(heads_tails)
[docs] def entropy(self):
return self._dirichlet.entropy()
@property
def concentration1(self) -> 张量:
结果 = self.
迪利克雷.
浓度[..., 0]
如果 isinstance(
结果,
数):
返回 torch.
张量
[
结果])
否则:
返回
结果
@property
def 浓度 0(self) ->
张量:
结果 = self.
迪利克雷.
浓度[..., 1]
如果 isinstance(
结果,
数):
返回 torch.
张量
[
结果])
否则:
返回
结果
@property
def 自然参数(self) ->
元组[
张量,
张量
]
返回 (self.
集中 1, self.
集中 0)
def _对数归一化器(self, x, y):
返回 torch.lgamma(x) + torch.lgamma(y) - torch.lgamma(x + y)