sf.apps.train.VGBS¶
-
class
VGBS
(A, n_mean, embedding, threshold, samples=None)[source]¶ Bases:
object
Create 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
threshold
flag. An initial value for the mean number of clicks (ifthreshold=True
) or mean number of photons (ifthreshold=False
) is also required. The initial valuen_mean
should 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
embedding
argument. An embedding from theembed
module such asExp
must 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
embed
module.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_samples
stored, 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
threshold
isTrue
, 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