当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python PyTorch Transform用法及代码示例


本文简要介绍python语言中 torch.distributions.transforms.Transform 的用法。

用法:

class torch.distributions.transforms.Transform(cache_size=0)

参数

cache_size(int) -缓存大小。如果为零,则不进行缓存。如果为 1,则缓存最新的单个值。仅支持 0 和 1。

变量

  • ~Transform.domain(Constraint) -表示此转换的有效输入的约束。

  • ~Transform.codomain(Constraint) -表示此变换的有效输出的约束,这些输出是逆变换的输入。

  • ~Transform.bijective(bool) -这种变换是否是双射的。对于域中的每个 x 和共域中的每个 y,变换 t 是双射的,如果 t.inv(t(x)) == xt(t.inv(y)) == y 。非双射变换至少应保持较弱的伪逆属性 t(t.inv(t(x)) == t(x)t.inv(t(t.inv(y))) == t.inv(y)

  • ~Transform.sign(int或者Tensor) -对于双射单变量变换,这应该是 +1 或 -1,具体取决于变换是单调递增还是递减。

具有可计算 log det jacobians 的可逆变换的抽象类。它们主要用于 torch.distributions.TransformedDistribution

缓存对于逆变换成本高或数值不稳定的变换很有用。请注意,必须注意 memory 值,因为 autograd 图可能会反转。例如,虽然以下内容在有或没有缓存的情况下都有效:

y = t(x)
t.log_abs_det_jacobian(x, y).backward()  # x will receive gradients.

但是,由于依赖反转,缓存时会出现以下错误:

y = t(x)
z = t.inv(y)
grad(z.sum(), [y])  # error because z is x

派生类应实现 _call()_inverse() 之一或两者。设置 bijective=True 的派生类也应该实现 log_abs_det_jacobian()

相关用法


注:本文由纯净天空筛选整理自pytorch.org大神的英文原创作品 torch.distributions.transforms.Transform。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。