torch.distributions.gumbel 的源代码
# mypy: 允许未类型化定义
导入
数学
导入
火炬
from 火炬
导入
张量
from torch.distributions 导入
约束
from torch.distributions.transformed_distribution 导入
转换分布
from torch.distributions.transforms 导入
变换矩阵, ExpTransform
from torch.distributions.uniform 导入 Uniform
from torch.distributions.utils 导入
广播全部,
欧拉常数
from torch.types 导入
数值
全部 = ["Gumbel"]
[文档]
类 Gumbel(
转换分布):
r
```python
# 假设输入文本为:
input_text = """Immersive Translate"""
# 翻译函数(此处仅为示例,实际翻译功能需要调用真实的翻译 API)
def translate_to_simplified_chinese(text):
# 这里应该调用真实的翻译 API 进行翻译
# 由于示例中不使用真实的 API,以下为模拟翻译结果
return text # 假设翻译结果与原文相同
# 输出翻译结果
translated_text = translate_to_simplified_chinese(input_text)
print(translated_text)
```
输出:
```
Immersive Translate
```
来自 Gumbel 分布的样本。
示例:
>>> # xdoctest: +IGNORE_WANT("非确定性")
>>> m = Gumbel(torch.tensor([1.0]), torch.tensor([2.0]))
>>> m.sample() # 从 Gumbel 分布中采样,位置参数为 1,尺度参数为 2
tensor([ 1.0124])
参数:
loc (float 或 Tensor): 分布的位置参数
scale (float 或 Tensor): 分布的尺度参数
"""
约束参数 = {"loc":
约束.
真实,
"缩放":
约束.
正的}
支持 =
约束.
真实
定义 __init__(
自我,
位置,
比例,
验证参数=
无):
自我.
位置,
自我.
缩放 =
广播全部(
位置,
比例)
信息 =
火炬.finfo(
自我.
位置.
数据类型)
如果 isinstance(
位置,
数)
和 isinstance(
比例,
数):
基础距离 =
均匀分布(finfo.
微小。, 1 - finfo.eps,
验证参数=
验证参数)
else:
基础距离 =
均匀分布(
火炬.
完全一样(
自我.
位置, finfo.
微小。),
火炬.
完全一样(
自我.
位置, 1 - finfo.eps),
验证参数=
验证参数,
)
转换 = [
指数转换().
涉及,
变换矩阵(
位置=0,
比例=-
火炬.
喜欢的(
自我.
比例)),
指数转换().
涉及,
变换矩阵(
位置=
位置,
比例=-
自我.
比例),
]
超级().__init__(base_dist,
变换,
验证参数=
验证参数)
[文档] def expand(self, batch_shape, _instance=None):
new = self._get_checked_instance(Gumbel, _instance)
new.loc = self.loc.expand(batch_shape)
new.scale = self.scale.expand(batch_shape)
return super().expand(batch_shape, _instance=new)
明确定义 Gumbel 的对数概率函数,以解决精度问题
[文档] def log_prob(self, value):
if self._validate_args:
self._validate_sample(value)
y = (self.loc - value) / self.scale
return (y - y.exp()) - self.scale.log()
@property
定义
均值(
自我)
翻译
张量:
返回
自我.
定位 +
自我.
缩放 *
欧拉常数
@property
定义
模式(
自我)
翻译
张量:
返回
自我.
定位
@property
定义
标准差(
自我)
翻译
张量:
返回 (
数学.
圆周率 /
数学.
平方根(6)) *
自我.
缩放
@property
定义
方差(
自我)
翻译
张量:
返回
自我.
标准差.pow(2)
[文档] def 熵(self):
return self.scale.log() + (1 + 欧拉常数)