class

IndependentTransform

extendsTransform
IndependentTransform(transform: Transform, reinterpreted_batch_ndims: int)
source

Reinterpret n trailing batch dimensions of an inner transform as event dims.

A thin wrapper that does not modify the forward / inverse maps but changes how the log-Jacobian-determinant is aggregated: the inner transform's per-element logdetJ\log|\det J| is summed over the reinterpreted trailing axes, producing a joint event Jacobian instead of an element-wise one. This is the bijection analogue of lucid.distributions.Independent for distributions.

Parameters

transformTransform
Inner bijection applied to each element.
reinterpreted_batch_ndimsint
Number of trailing batch dimensions to promote to event dimensions.

Notes

Forward / inverse: unchanged from the inner transform.

Log Jacobian determinant (with nn = reinterpreted_batch_ndims minus the inner event_dim):

logdetJouter=last n axeslogdetJinner\log|\det J|_{\text{outer}} = \sum_{\text{last } n \text{ axes}} \log|\det J|_{\text{inner}}

Use this whenever an element-wise transform (e.g. ExpTransform) is applied to a vector that you want treated as a single event for the purposes of computing logp(y)\log p(\mathbf{y}) under the pushforward distribution.

Examples

>>> import lucid
>>> from lucid.distributions.transforms import ExpTransform, IndependentTransform
>>> T = IndependentTransform(ExpTransform(), reinterpreted_batch_ndims=1)
>>> T(lucid.tensor([0.0, 1.0, 2.0]))
Tensor([1.0, 2.7183, 7.3891])

Methods (2)

dunder

__init__

None
__init__(transform: Transform, reinterpreted_batch_ndims: int)
source

Wrap transform and promote reinterpreted_batch_ndims batch dims to event dims.

fn

log_abs_det_jacobian

Tensor
log_abs_det_jacobian(x: Tensor, y: Tensor)
source

Sum the wrapped Jacobian over the reinterpreted trailing dims.