pub struct NormalizingFlowVI {
pub base: MeanFieldGaussian,
pub flows: Vec<FlowLayer>,
pub dim: usize,
}Expand description
Normalizing flow variational family (placeholder/scaffold)
This provides a framework for flow-based variational inference where the posterior is represented as a composition of invertible transformations applied to a base distribution (typically a standard Gaussian).
q(z) = q_0(f^{-1}(z)) * |det(df^{-1}/dz)|
Currently supports:
- Planar flows: f(z) = z + u * h(w^T z + b)
- Radial flows: f(z) = z + beta * h(alpha, r)(z - z0)
Fields§
§base: MeanFieldGaussianBase distribution (mean-field Gaussian)
flows: Vec<FlowLayer>Flow layers
dim: usizeDimensionality
Implementations§
Source§impl NormalizingFlowVI
impl NormalizingFlowVI
Sourcepub fn new(dim: usize, n_flows: usize) -> Result<Self>
pub fn new(dim: usize, n_flows: usize) -> Result<Self>
Create a new normalizing flow VI with a base mean-field Gaussian
Sourcepub fn add_planar_flow(
&mut self,
u: Array1<f64>,
w: Array1<f64>,
b: f64,
) -> Result<()>
pub fn add_planar_flow( &mut self, u: Array1<f64>, w: Array1<f64>, b: f64, ) -> Result<()>
Add a planar flow layer
Sourcepub fn add_radial_flow(
&mut self,
z0: Array1<f64>,
log_alpha: f64,
beta: f64,
) -> Result<()>
pub fn add_radial_flow( &mut self, z0: Array1<f64>, log_alpha: f64, beta: f64, ) -> Result<()>
Add a radial flow layer
Sourcepub fn transform(&self, z0: &Array1<f64>) -> Result<(Array1<f64>, f64)>
pub fn transform(&self, z0: &Array1<f64>) -> Result<(Array1<f64>, f64)>
Transform a sample through all flow layers, returning the transformed sample and the sum of log-abs-det-Jacobians
Sourcepub fn sample(&self, epsilon: &Array1<f64>) -> Result<(Array1<f64>, f64)>
pub fn sample(&self, epsilon: &Array1<f64>) -> Result<(Array1<f64>, f64)>
Sample from the flow-transformed distribution
Sourcepub fn n_flow_params(&self) -> usize
pub fn n_flow_params(&self) -> usize
Get the number of flow parameters
Trait Implementations§
Source§impl Clone for NormalizingFlowVI
impl Clone for NormalizingFlowVI
Source§fn clone(&self) -> NormalizingFlowVI
fn clone(&self) -> NormalizingFlowVI
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
impl Freeze for NormalizingFlowVI
impl RefUnwindSafe for NormalizingFlowVI
impl Send for NormalizingFlowVI
impl Sync for NormalizingFlowVI
impl Unpin for NormalizingFlowVI
impl UnsafeUnpin for NormalizingFlowVI
impl UnwindSafe for NormalizingFlowVI
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.