netket.sampler.ExactSampler
netket.sampler.ExactSampler#
- class netket.sampler.ExactSampler#
Bases:
netket.sampler.Sampler
This sampler generates i.i.d. samples from \(|\Psi(\sigma)|^2\).
In order to perform exact sampling, \(|\Psi(\sigma)|^2\) is precomputed an all the possible values of the quantum numbers \(\sigma\). This sampler has thus an exponential cost with the number of degrees of freedom, and cannot be used for large systems, where Metropolis-based sampling are instead a viable option.
- Inheritance
- __init__(*args, __precompute_cached_properties=False, __skip_preprocess=False, **kwargs)#
Construct an exact sampler.
- Parameters
hilbert – The Hilbert space to sample.
machine_pow – The power to which the machine should be exponentiated to generate the pdf (default = 2).
dtype – The dtype of the states sampled (default = np.float64).
- Attributes
- is_exact#
- n_batches#
The batch size of the configuration $sigma$ used by this sampler.
In general, it is equivalent to
n_chains_per_rank
.- Return type
- n_chains#
The total number of independent chains across all MPI ranks.
If you are not using MPI, this is equal to
n_chains_per_rank
.- Return type
- hilbert: netket.hilbert.AbstractHilbert#
- Methods
- init_state(machine, parameters, seed=None)#
Creates the structure holding the state of the sampler.
If you want reproducible samples, you should specify seed, otherwise the state will be initialised randomly.
If running across several MPI processes, all sampler_state`s are guaranteed to be in a different (but deterministic) state. This is achieved by first reducing (summing) the seed provided to every MPI rank, then generating `n_rank seeds starting from the reduced one, and every rank is initialized with one of those seeds.
The resulting state is guaranteed to be a frozen Python dataclass (in particular, a Flax dataclass), and it can be serialized using Flax serialization methods.
- Parameters
machine (
Union
[Callable
,Module
]) – A Flax module or callable with the forward pass of the log-pdf. If it is a callable, it should have the signaturef(parameters, σ) -> jnp.ndarray
.parameters (
Any
) – The PyTree of parameters of the model.seed (
Union
[int
,Any
,None
]) – An optional seed or jax PRNGKey. If not specified, a random seed will be used.
- Return type
- Returns
The structure holding the state of the sampler. In general you should not expect it to be in a valid state, and should reset it before use.
- log_pdf(model)#
Returns a closure with the log-pdf function encoded by this sampler.
- Parameters
model (
Union
[Callable
,Module
]) – A Flax module or callable with the forward pass of the log-pdf. If it is a callable, it should have the signaturef(parameters, σ) -> jnp.ndarray
.- Return type
- Returns
The log-probability density function.
Note
The result is returned as a HashablePartial so that the closure does not trigger recompilation.
- replace(**updates)#
Returns a new object replacing the specified fields with new values.
- reset(machine, parameters, state=None)#
Resets the state of the sampler. To be used every time the parameters are changed.
- Parameters
machine (
Union
[Callable
,Module
]) – A Flax module or callable with the forward pass of the log-pdf. If it is a callable, it should have the signaturef(parameters, σ) -> jnp.ndarray
.parameters (
Any
) – The PyTree of parameters of the model.state (
Optional
[SamplerState
]) – The current state of the sampler. If not specified, it will be constructed by callingsampler.init_state(machine, parameters)
with a random seed.
- Return type
- Returns
A valid sampler state.
- sample(machine, parameters, *, state=None, chain_length=1)#
Samples chain_length batches of samples along the chains.
- Parameters
machine (
Union
[Callable
,Module
]) – A Flax module or callable with the forward pass of the log-pdf. If it is a callable, it should have the signaturef(parameters, σ) -> jnp.ndarray
.parameters (
Any
) – The PyTree of parameters of the model.state (
Optional
[SamplerState
]) – The current state of the sampler. If not specified, then initialize and reset it.chain_length (
int
) – The length of the chains (default = 1).
- Returns
The generated batches of samples. state: The new state of the sampler.
- Return type
σ
- samples(machine, parameters, *, state=None, chain_length=1)#
Returns a generator sampling chain_length batches of samples along the chains.
- Parameters
machine (
Union
[Callable
,Module
]) – A Flax module or callable with the forward pass of the log-pdf. If it is a callable, it should have the signaturef(parameters, σ) -> jnp.ndarray
.parameters (
Any
) – The PyTree of parameters of the model.state (
Optional
[SamplerState
]) – The current state of the sampler. If not specified, then initialize and reset it.chain_length (
int
) – The length of the chains (default = 1).
- Return type