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

torch.distributions.laplace 的源代码

# mypy: 允许未类型化定义
导入 火炬
from 火炬 导入 张量
from torch.distributions 导入 约束
from torch.distributions.distribution 导入 分布
from torch.distributions.utils 导入 广播全部
from torch.types 导入 , _大小


全部 = [拉普拉斯]


[文档] 拉普拉斯分布(分发): 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 ``` 创建一个由 :attr:`loc` 和 :attr:`scale` 参数化的拉普拉斯分布。 示例:: >>> # xdoctest: +IGNORE_WANT("非确定性") >>> m = Laplace(torch.tensor([0.0]), torch.tensor([1.0])) >>> m.sample() # Laplace 分布,均值=0,尺度=1 tensor([ 0.1046]) 参数: loc (float or Tensor): 分布的均值 scale (float or Tensor): 分布的尺度 """ 约束参数 = {"loc": 约束.真实, "缩放": 约束.正的} 支持 = 约束.真实 has_rsample = 真实 @property 定义 均值(self) 翻译 张量: return self.定位 @property 定义 模式(self) 翻译 张量: return self.定位 @property 定义 方差(self) 翻译 张量: return 2 * self.比例.pow(2) @property 定义 标准差(self) 翻译 张量: return (2**0.5) * self.缩放 定义 __init__(self, 位置, 比例, 验证参数=): self.位置, self.缩放 = 广播全部(位置, 比例) 如果 isinstance(位置, ) isinstance(比例, ): 批量形状 = 火炬.尺寸() else: 批量形状 = self.位置.大小() 超级().__init__(批量形状, 验证参数=验证参数)
[文档] def expand(self, batch_shape, _instance=None): new = self._get_checked_instance(Laplace, _instance) batch_shape = torch.Size(batch_shape) new.loc = self.loc.expand(batch_shape) new.scale = self.scale.expand(batch_shape) super(Laplace, new).__init__(batch_shape, validate_args=False) new._validate_args = self._validate_args return new
[文档] def rsample(self, sample_shape: _size = torch.Size()): shape = self._extended_shape(sample_shape) finfo = torch.finfo(self.loc.dtype) if torch._C._get_tracing_state(): # [JIT WORKAROUND] 对 .uniform_() 的支持不足 u = torch.rand(shape, dtype=self.loc.dtype, device=self.loc.device) * 2 - 1 return self.loc - self.scale * u.sign() * torch.log1p( -u.abs().clamp(min=finfo.tiny) ) u = self.loc.new(shape).uniform_(finfo.eps - 1, 1) # TODO: 如果我们将来实现 tensor.nextafter,以下是我们理想中的实现。 # u = self.loc.new(shape).uniform_(self.loc.nextafter(-.5, 0), .5) return self.loc - self.scale * u.sign() * torch.log1p(-u.abs())
[文档] def log_prob(self, value): if self._validate_args: self._validate_sample(value) return -torch.log(2 * self.scale) - torch.abs(value - self.loc) / self.scale
[文档] def cdf(self, value): if self._validate_args: self._validate_sample(value) return 0.5 - 0.5 * (value - self.loc).sign() * torch.expm1( -(value - self.loc).abs() / self.scale )
[文档] def icdf(self, value): term = value - 0.5 return self.loc - self.scale * (term).sign() * torch.log1p(-2 * term.abs())
[文档] def entropy(self): return 1 + torch.log(2 * self.scale)

© 版权所有 PyTorch 贡献者。

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

文档

查看 PyTorch 的全面开发者文档

查看文档

教程

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

查看教程

资源

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

查看资源