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()