该模型使用QCNN对多体波函数进行分类。
抽象到具体的分类问题,就是对波函数进行二分类。量子比特数目确定的情况下,编码线路是给定的。每一个样本输入是encoder中的参数,输出是-1或1,分别代表顺磁相和铁磁相。分类网络使用的是QCNN。
QCNN主要包含卷积层和池化层,如果把conv和pooling看成是一个模块的话,每个模块共包含21个参数。下面分别介绍。
结构如图:
其中每个门的参数各不相同。有15个参数门,15个参数。
结构如图:
其中有些参数门公用同一个参数。有9个参数门,6个参数。
数据集使用的是tensorflow-quantum中内置的tfi_chain数据集。数据集中共包含81个数据,每条数据对本任务有用的数据为
以4-qubit系统为例,展示样本encoder的线路:
使用线性插值方法对样本中的gamma和params做了插值,增加样本个数。相邻的两个样本点中再插入11个点,这样样本数量增加到了961。
https://gitee.com/richybai/qcnn
QCNN
├── data # 存储原始的tfi_chain数据
│ ├── 12qbsdata.npy # 12qubits数据
│ ├── 4qbsdata.npy # 4qubits数据
│ └── 8qbsdata.npy # 8qubits数据
├── readme.md # 说明文档
├── requirements.txt # 代码依赖项
├── src # 模型定义源码目录
│ ├── config.py # 模型的配置参数
│ ├── data_gene.py # 由原始tfi_chain数据线性插值生成数据的文件
│ └── QCNN.py # QCNN模型代码
└── main.py # 训练测试代码
batch_size = 4
epochs = 20
learning_rate = 0.001
loss = MSELoss()
optimizer = Adam()
在训练前,需要使用data_gene.py
线性插值生成数据。
cd
到src
目录下直接**python data_gene.py
**即可。
每次训练前,需要到config.py
文件夹下修改参数,需要修改的有:
1. `n_qubits`:指定代码数据的量子比特数,可以为 4 8 12
2. `use_additional_data`:指定是否使用线性插值后的数据,可以为 `True`or`False`
3. `random_seed`:指定随机数种子。
运行代码后会打印如下信息:
1. config of training
2. summary of encoder
3. data information
4. summary of ansatz(QCNN)
5. training and testing information
会在result_{n_qubits}
文件夹下保存若干模型参数以及loss和accuarcy数据。
开始训练时,cd
到根目录,使用命令**python main.py
**
下面以(4,True,33)为例,展示代码输出:
config of training------------
qubits numbers : 4
additional data: True
random seed : 33
batch size : 4
repeat sise : 1
learning rate : 0.001
epochs : 20
summary of encoder:
========================Circuit Summary========================
|Total number of gates : 20. |
|Parameter gates : 16. |
|with 4 parameters are : theta_0, theta_2, theta_1, theta_3. |
|Number qubit of circuit: 4 |
===============================================================
parameters of encoder: ['theta_0', 'theta_2', 'theta_1', 'theta_3']
total data number: 960
params in one sample: 4
train sample: 768, x_train shape: (768, 4), y_train shape: (768, 1)
test sample: 768, x_test shape: (192, 4), y_test shape: (192, 1)
summary of ansatz(QCNN):
==========================Circuit Summary===========================
|Total number of gates : 75. |
|Parameter gates : 72. |
|with 63 parameters are : l1c1_px0, l1c1_px1, l1c1_py0, ... |
|Number qubit of circuit: 4 |
====================================================================
begin training: --------------
epoch: 1, training loss: 1.0602, accuracy: 0.849, testing loss: 0.614144, accuracy: 0.8854
epoch: 2, training loss: 0.490626, accuracy: 0.9193, testing loss: 0.400552, accuracy: 0.9583
epoch: 3, training loss: 0.420938, accuracy: 0.9284, testing loss: 0.387441, accuracy: 0.9583
epoch: 4, training loss: 0.415707, accuracy: 0.931, testing loss: 0.385453, accuracy: 0.9583
epoch: 5, training loss: 0.41375, accuracy: 0.9323, testing loss: 0.383884, accuracy: 0.9583
epoch: 6, training loss: 0.41196, accuracy: 0.9349, testing loss: 0.382288, accuracy: 0.9583
epoch: 7, training loss: 0.410165, accuracy: 0.9362, testing loss: 0.380624, accuracy: 0.9583
epoch: 8, training loss: 0.408331, accuracy: 0.9375, testing loss: 0.378879, accuracy: 0.9583
epoch: 9, training loss: 0.406446, accuracy: 0.9388, testing loss: 0.377072, accuracy: 0.9583
epoch: 10, training loss: 0.40454, accuracy: 0.9414, testing loss: 0.375264, accuracy: 0.9583
epoch: 11, training loss: 0.402684, accuracy: 0.9427, testing loss: 0.373557, accuracy: 0.9583
epoch: 12, training loss: 0.400981, accuracy: 0.9427, testing loss: 0.372066, accuracy: 0.9583
epoch: 13, training loss: 0.39952, accuracy: 0.9427, testing loss: 0.370861, accuracy: 0.9635
epoch: 14, training loss: 0.398338, accuracy: 0.944, testing loss: 0.369944, accuracy: 0.9635
epoch: 15, training loss: 0.397416, accuracy: 0.944, testing loss: 0.36927, accuracy: 0.9635
epoch: 16, training loss: 0.396701, accuracy: 0.9453, testing loss: 0.368772, accuracy: 0.9635
epoch: 17, training loss: 0.396134, accuracy: 0.9466, testing loss: 0.368387, accuracy: 0.9635
epoch: 18, training loss: 0.395664, accuracy: 0.9466, testing loss: 0.368072, accuracy: 0.9635
epoch: 19, training loss: 0.395256, accuracy: 0.9466, testing loss: 0.367796, accuracy: 0.9635
epoch: 20, training loss: 0.394889, accuracy: 0.9466, testing loss: 0.367544, accuracy: 0.9688
additional data | qubits | final acc | best acc |
---|---|---|---|
False | 4 | 1.0 | 1.0 |
False | 8 | 1.0 | 1.0 |
False | 12 | 0.9375 | 1.0 |
True | 4 | 0.9688 | 0.9688 |
True | 8 | 0.9688 | 1.0 |
True | 12 | 0.974 | 0.9948 |
Wrobel N, Baul A, Moreno J, et al. An Application of Quantum Machine Learning on Quantum Correlated Systems: Quantum Convolutional Neural Network as a Classifier for Many-Body Wavefunctions from the Quantum Variational Eigensolver[J]. arXiv preprint arXiv:2111.05076, 2021.
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型