sf.apps.train.VGBS¶
-
class
VGBS(A, n_mean, embedding, threshold, samples=None)[source]¶ Bases:
objectCreate a variational GBS model for optimization and machine learning.
An input adjacency matrix \(A\) can be varied using:
\[A(\theta) = W(\theta) A W(\theta),\]with \(W\) a diagonal matrix of weights that depend on a set of parameters \(\theta\).
By varying \(\theta\), the distribution of samples from GBS can be trained to solve stochastic optimization and unsupervised machine learning problems.
The above variational model can be used in both the threshold and PNR modes of GBS, which is specified using the
thresholdflag. An initial value for the mean number of clicks (ifthreshold=True) or mean number of photons (ifthreshold=False) is also required. The initial valuen_meanshould be set high since varying \(\theta\) can only lower the mean number of clicks or photons.The mapping from \(\theta\) to \(W(\theta)\) is specified using the
embeddingargument. An embedding from theembedmodule such asExpmust be used, which uses the simple embedding \(W(\theta) = \exp(-\theta)\).Example usage:
>>> g = nx.erdos_renyi_graph(4, 0.7, seed=1967) >>> A = nx.to_numpy_array(g) >>> embedding = train.embed.Exp(4) >>> vgbs = VGBS(A, 3, embedding, threshold=True) >>> params = np.array([0.05, 0.1, 0.02, 0.01]) >>> vgbs.A(params) array([[0. , 0.30298161, 0.31534653, 0.31692721], [0.30298161, 0. , 0.30756059, 0.30910225], [0.31534653, 0.30756059, 0. , 0.32171695], [0.31692721, 0.30910225, 0.32171695, 0. ]]) >>> vgbs.n_mean(params) 2.299036355948707 >>> vgbs.generate_samples(vgbs.A(params), 2) array([[1, 1, 1, 0], [0, 1, 0, 1]])
- Parameters
A (array) – the input adjacency matrix \(A\)
n_mean (float) – the initial mean number of clicks or photons
embedding – the method of converting from trainable parameters \(\theta\) to \(W(\theta)\). Must be an embedding instance from the
embedmodule.threshold (bool) – determines whether to use GBS in threshold or PNR mode
samples (array) – an optional array of samples from \(A\) used to speed up gradient calculations
Methods
A(params)Calculate the trained adjacency matrix \(A(\theta)\).
W(params)Calculate the diagonal matrix of weights \(W\) that depends on the trainable parameters \(\theta\).
add_A_init_samples(samples)Add samples of the initial adjacency matrix to
A_init_samples.generate_samples(A, n_samples, **kwargs)Generate GBS samples from an input adjacency matrix.
get_A_init_samples(n_samples)Get samples from the initial adjacency matrix.
mean_clicks_by_mode(params)Calculate the mean number of clicks in each mode when using the trainable parameters \(\theta\).
mean_photons_by_mode(params)Calculate the mean number of photons in each mode when using the trainable parameters \(\theta\).
n_mean(params)Calculates the mean number of clicks or photons.
prob_sample(params, sample)Calculate the probability of a given sample being generated by the VGBS system using the trainable parameters \(\theta\).
-
A(params)[source]¶ Calculate the trained adjacency matrix \(A(\theta)\).
Example usage:
>>> vgbs.A(params) array([[0. , 0.30298161, 0.31534653, 0.31692721], [0.30298161, 0. , 0.30756059, 0.30910225], [0.31534653, 0.30756059, 0. , 0.32171695], [0.31692721, 0.30910225, 0.32171695, 0. ]])
- Parameters
params (array) – the trainable parameters \(\theta\)
- Returns
the trained adjacency matrix
- Return type
array
-
W(params)[source]¶ Calculate the diagonal matrix of weights \(W\) that depends on the trainable parameters \(\theta\).
Example usage:
>>> vgbs.W(params) array([[0.97530991, 0. , 0. , 0. ], [0. , 0.95122942, 0. , 0. ], [0. , 0. , 0.99004983, 0. ], [0. , 0. , 0. , 0.99501248]])
- Parameters
params (array) – the trainable parameters \(\theta\)
- Returns
the diagonal matrix of weights
- Return type
array
-
add_A_init_samples(samples)[source]¶ Add samples of the initial adjacency matrix to
A_init_samples.Warning
The added samples must be from the input adjacency matrix and not the trained one \(A(\theta)\).
Example usage:
>>> samples = np.array([[0, 1, 0, 0], [0, 1, 1, 1]]) >>> vgbs.add_A_init_samples(samples)
- Parameters
samples (array) – samples from the initial adjacency matrix
-
generate_samples(A, n_samples, **kwargs)[source]¶ Generate GBS samples from an input adjacency matrix.
Example usage:
>>> vgbs.generate_samples(vgbs.A(params), 2) array([[1, 1, 1, 0], [0, 1, 0, 1]])
- Parameters
A (array) – the adjacency matrix
n_samples (int) – the number of GBS samples to generate
**kwargs – additional arguments to pass to the sampler from The Walrus
- Returns
the generated samples
- Return type
array
-
get_A_init_samples(n_samples)[source]¶ Get samples from the initial adjacency matrix.
This function checks for pre-generated samples in
A_init_samples. If there are fewer thann_samplesstored, more samples are generated and added toA_init_samples.- Parameters
n_samples (int) – number of samples to get
- Returns
samples from the initial adjacency matrix
- Return type
array
-
mean_clicks_by_mode(params)[source]¶ Calculate the mean number of clicks in each mode when using the trainable parameters \(\theta\).
Example usage:
>>> vgbs.mean_clicks_by_mode(params) array([0.57419812, 0.5680168 , 0.57781579, 0.57900564])
- Parameters
params (array) – the trainable parameters \(\theta\)
- Returns
a vector giving the mean number of clicks in each mode
- Return type
array
-
mean_photons_by_mode(params)[source]¶ Calculate the mean number of photons in each mode when using the trainable parameters \(\theta\).
Example usage:
>>> vgbs.mean_photons_by_mode(params) array([1.87217857, 1.8217392 , 1.90226515, 1.91225543])
- Parameters
params (array) – the trainable parameters \(\theta\)
- Returns
a vector giving the mean number of photons in each mode
- Return type
array
-
n_mean(params)[source]¶ Calculates the mean number of clicks or photons.
Evaluates the mean number of clicks or photons of the VGBS system when using the trainable parameters \(\theta\). The mean number of clicks is returned when
thresholdisTrue, otherwise the mean number of photons is returned.Example usage:
>>> vgbs.n_mean(params) 2.299036355948707
- Parameters
params (array) – the trainable parameters \(\theta\)
- Returns
the mean number of clicks or photons
- Return type
float