qiskit.aqua.components.neural_networks.QuantumGenerator
class QuantumGenerator(bounds, num_qubits, generator_circuit=None, init_params=None, optimizer=None, gradient_function=None, snapshot_dir=None)
Quantum Generator.
The quantum generator is a parametrized quantum circuit which can be trained with the QGAN
algorithm to generate a quantum state which approximates the probability distribution of given training data. At the beginning of the training the parameters will be set randomly, thus, the output will is random. Throughout the training the quantum generator learns to represent the target distribution. Eventually, the trained generator can be used for state preparation e.g. in QAE.
Parameters
- bounds (
ndarray
) – k min/max data values [[min_1,max_1],…,[min_k,max_k]], given input data dim k - num_qubits (
Union
[List
[int
],ndarray
]) – k numbers of qubits to determine representation resolution, i.e. n qubits enable the representation of 2**n values [n_1,…, n_k] - generator_circuit (
Union
[UnivariateVariationalDistribution
,MultivariateVariationalDistribution
,QuantumCircuit
,None
]) – a UnivariateVariationalDistribution for univariate data, a MultivariateVariationalDistribution for multivariate data, or a QuantumCircuit implementing the generator. - init_params (
Union
[List
[float
],ndarray
,None
]) – 1D numpy array or list, Initialization for the generator’s parameters. - optimizer (
Optional
[Optimizer
]) – optimizer to be used for the training of the generator - gradient_function (
Union
[Callable
,Gradient
,None
]) – A Gradient object, or a function returning partial derivatives of the loss function w.r.t. the generator variational params. - snapshot_dir (
Optional
[str
]) – str or None, if not None save the optimizer’s parameter after every update step to the given directory
Raises
AquaError – Set multivariate variational distribution to represent multivariate data
__init__
__init__(bounds, num_qubits, generator_circuit=None, init_params=None, optimizer=None, gradient_function=None, snapshot_dir=None)
Parameters
- bounds (
ndarray
) – k min/max data values [[min_1,max_1],…,[min_k,max_k]], given input data dim k - num_qubits (
Union
[List
[int
],ndarray
]) – k numbers of qubits to determine representation resolution, i.e. n qubits enable the representation of 2**n values [n_1,…, n_k] - generator_circuit (
Union
[UnivariateVariationalDistribution
,MultivariateVariationalDistribution
,QuantumCircuit
,None
]) – a UnivariateVariationalDistribution for univariate data, a MultivariateVariationalDistribution for multivariate data, or a QuantumCircuit implementing the generator. - init_params (
Union
[List
[float
],ndarray
,None
]) – 1D numpy array or list, Initialization for the generator’s parameters. - optimizer (
Optional
[Optimizer
]) – optimizer to be used for the training of the generator - gradient_function (
Union
[Callable
,Gradient
,None
]) – A Gradient object, or a function returning partial derivatives of the loss function w.r.t. the generator variational params. - snapshot_dir (
Optional
[str
]) – str or None, if not None save the optimizer’s parameter after every update step to the given directory
Raises
AquaError – Set multivariate variational distribution to represent multivariate data
Methods
__init__ (bounds, num_qubits[, …]) | type boundsndarray |
construct_circuit ([params]) | Construct generator circuit. |
get_output (quantum_instance[, params, shots]) | Get classical data samples from the generator. |
loss (x, weights) | Loss function for training the generator’s parameters. |
set_discriminator (discriminator) | Set discriminator network. |
set_seed (seed) | Set seed. |
train ([quantum_instance, shots]) | Perform one training step w.r.t to the generator’s parameters |
Attributes
discriminator | Get discriminator. |
optimizer | Get optimizer. |
parameter_values | Get parameter values from the quantum generator |
seed | Get seed. |
construct_circuit
construct_circuit(params=None)
Construct generator circuit.
Parameters
params (list | dict) – parameters which should be used to run the generator.
Returns
construct the quantum circuit and return as gate
Return type
discriminator
Get discriminator.
Return type
DiscriminativeNetwork
get_output
get_output(quantum_instance, params=None, shots=None)
Get classical data samples from the generator. Running the quantum generator circuit results in a quantum state. To train this generator with a classical discriminator, we need to sample classical outputs by measuring the quantum state and mapping them to feature space defined by the training data.
Parameters
- quantum_instance (QuantumInstance) – Quantum Instance, used to run the generator circuit.
- params (numpy.ndarray) – array or None, parameters which should be used to run the generator, if None use self._params
- shots (int) – if not None use a number of shots that is different from the number set in quantum_instance
Returns
generated samples, array: sample occurrence in percentage
Return type
list
loss
loss(x, weights)
Loss function for training the generator’s parameters.
Parameters
- x (numpy.ndarray) – sample label (equivalent to discriminator output)
- weights (numpy.ndarray) – probability for measuring the sample
Returns
loss function
Return type
float
optimizer
Get optimizer.
Return type
Optimizer
parameter_values
Get parameter values from the quantum generator
Return type
Union
[List
, ndarray
]
Returns
Current parameter values
seed
Get seed.
Return type
int
set_discriminator
set_discriminator(discriminator)
Set discriminator network.
Parameters
discriminator (DiscriminativeNetwork) – Discriminator used to compute the loss function.
Return type
None
set_seed
set_seed(seed)
Set seed.
Parameters
seed (int) – seed
Return type
None
train
train(quantum_instance=None, shots=None)
Perform one training step w.r.t to the generator’s parameters
Parameters
- quantum_instance (QuantumInstance) – used to run the generator circuit.
- shots (int) – Number of shots for hardware or qasm execution.
Returns
generator loss(float) and updated parameters (array).
Return type
dict