GreNADE is for quantum state reconstruction using Neural Autoregressive Distribution Estimators (NADEs).
Firstly, include NADE.jl.
include("NADE.jl")NADE.jl includes all relevant functions to train a NADE. However, the user must specify the following.
train_data: a file containing samples of binary dataNh: the number of hidden units
Now, to initialize the NADE parameters, call the initialize_parameters() function. There are two keyword arguments for this:
seed: (default: 1234) the random seed for initializing the NADE weightszero_weights: (Bool, default: false) choice of initializing the NADE weights to zero or not. Of course, this will override the seed if it was specified. So,initialize_parameters(seed=9999, zero_weights=true)won't do anything withseedand one could have equivalently calledinitialize_parameters(zero_weights=true).
The biases of the NADE are always set to initialize to zero. Now, specify what is needed to call the train function to train the NADE.
train_data: binary input databatch_size: (integer, default: 100) the mini batch size used for calculating gradientsopt: the optimization method (e.g.ADAM()). These are optimizers available in Flux.epochs: (integer, default:1000) number of training steps (passes through the input data)calc_fidelity: (Bool, default:false) Do you want to monitor the fidelity while training the NADE?target: The target quantum state. Ifcalc_fidelity=true, this is required (of course!)calc_observable: (Bool, default:false) Do you want to monitor an observable while training the NADE?num_samples: (integer, default:nothing) ifcalc_observable=true, then we need to know how many samples you want to generate from the NADE to calculate your observable on.observable: (function, default:nothing, returns: the value of the observable on one sample) This is a user-specified function that calculates the value of an observable given one sample from the NADE.log_every: the frequeny (in epochs) that one wishes to monitor their training metric (fidelity or an observable)early_stopping: (function, default:nothing, returns: Bool) This is a user-specified function that defines a learning criteria for the NADE that, once met during the training, stops the training early (i.e. before the last epoch). The arguments to this function must be: the "current" metric value (e.g. if you're calculating fidelity, you must input the current fidelity in the training process) and other arguments required (seeearly_stopping_args)early_stopping_args: Other required arguments required for theearly_stoppingfunction.
If you're at all confused, see run.jl for an example of how to train a NADE.