Centralized Learning – Variational Quantum Circuits

Examples of centralized machine learning with variational quantum circuits.


Iris Dataset

iris_vqc_example.py
 1import torch
 2
 3from kosmos.circuit_runner.pennylane_runner import PennyLaneRunner
 4from kosmos.ml.cl_manager import CLManager
 5from kosmos.ml.config.factories.encoding import AngleEmbeddingConfig
 6from kosmos.ml.config.factories.loss import CrossEntropyLossConfig
 7from kosmos.ml.config.factories.model import VQCConfig
 8from kosmos.ml.config.factories.optimizer import AdamOptimizerConfig
 9from kosmos.ml.config.sl_train import SLTrainConfig
10from kosmos.ml.datasets.iris_dataset import IrisDataset
11from kosmos.utils.rng import RNG
12
13
14def iris_vqc_example() -> None:
15    """Run example of training and testing on the Iris dataset using a VQC."""
16    RNG.initialize(seed=1)
17
18    iris_dataset = IrisDataset()
19
20    vqc_config = VQCConfig(
21        circuit_runner=PennyLaneRunner(),
22        num_layers=2,
23        encoding_config=AngleEmbeddingConfig(rotation="X"),
24        weight_mapping_func=lambda x: torch.pi * torch.tanh(x),
25        input_mapping_func=lambda x: torch.pi * x,
26        weight_init_range=(-1, 1),
27        bias_init_range=(-0.001, 0.001),
28        data_reuploading=True,
29        output_scaling=True,
30    )
31
32    config = SLTrainConfig(
33        dataset=iris_dataset,
34        train_split=0.7,
35        batch_size=8,
36        num_epochs=50,
37        model_config=vqc_config,
38        optimizer_config=AdamOptimizerConfig(lr=0.01),
39        lr_scheduler_config=None,
40        max_grad_norm=1.0,
41        loss_config=CrossEntropyLossConfig(),
42    )
43
44    manager = CLManager(config)
45
46    for epoch_result in manager.train():
47        print(epoch_result)  # noqa: T201
48    print(manager.test())  # noqa: T201
49
50
51if __name__ == "__main__":
52    iris_vqc_example()