# SEQNN **Repository Path**: richybai/seqnn ## Basic Information - **Project Name**: SEQNN - **Description**: The code of the paper Superposition-enhanced quantum neural network for multi-class image classification, which has been accepted by Chinese Journal of Physics. - **Primary Language**: Python - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2023-05-05 - **Last Updated**: 2025-08-05 ## Categories & Tags **Categories**: machine-learning **Tags**: None ## README # SEQNN The code of the paper [Superposition-enhanced quantum neural network for multi-class image classification](https://doi.org/10.1016/j.cjph.2024.03.026), which has been accepted by **Chinese Journal of Physics**. 本代码主要是使用多个二分类器完成多分类任务 创新点有: 1. 为了绕过线性分类器的问题,使用了one vs all,没有添加带参数的经典网络 2. 为了平衡样本,采用了superposition方式。指定的是固定的系数,相当于在特征空间中做变换(还可以直接从图像空间切换到角度空间) 3. QNN circuit design,旋转角度,+ entanglement alternatively + measurement at the final qubit. 4. amplitude encoding, reduce the quantum resource needed for tasks. 行文思路是,设计了一个可以准确二分类的网络。为了多分类,避免线性分类难度,superposition。 ## 数据预处理 需要将图像转化为AmplitudeEncoding的角度。 ### src2image.ipynb 数据集包括 1. MNIST 70000, 样本有多有少, 测试集取1000, 剩下的训练 2. Fashion MNIST, 70000, 1000测试, 6000训练 3. CIFAR10, 60000, 1000测试, 5000训练 其中image保存成了np.int32 每一个数据文件夹下,都有train_image.npy 和 test_image.npy ### image2angle.py 把图像向量转化为角度向量。输入文件路径, 保存路径 每一个数据集要完成三种转换, positive标签是1, negative标签是-1 1. 把图片直接转换为angle保存, train test都要转换 convert_angle (train_angle.npy, test_angle.npy) 2. 把转换后的angle分成十组, 对应十个二分类mixup起来保存, 只需要转换train angle_mixup (angle_mixup.npy) 3. 把图片分成十组mixup之后, 再转换为角度保存, 只需要转换train mixup_angle (mixup_angle.npy) 需要注意的是,MNIST数据集是28x28的,CIFAR10是32x32,转换cifar时要输入origin=32,代码中默认为28。 ### image_superposition.ipynb 1. 分别画出了mixup图像和angle后再转图像的结果,肉眼是直接mixup好 2. 计算每类中心点, 低维可视化, 并计算互相之间的余弦相似度, 以及1v9的余弦相似度。 3. 对fashion mnist 数据集也做了上述操作 ### src.utils_data.py 数据处理以及数据加载的函数 1. 数据集加载 load_mnist, 以及load_cifar10 2. 使用BILINEAR插值方法 完成图像的resize resize_image_batch, 加入了origin resize shape, 适配cifar10输入32 3. 把向量数据转化为amplitude encoding里面的角度 convert_data_2_angles 4. 使用zip在一起的数据生成MS的GeneratorDataset对象 create_dataset 5. 从convert_and_mixup生成的数据中加载训练需要用到的数据, extract_data, 可以设置加载样本数目 6. 实现extract_data_biased, 实现不均衡数据训练,对比superposition结果 ## 二分类 ### src.utils_qnn.py 1. 生成振幅编码线路: gene_amplitude_encoder 2. 生成RZ RY RZ + CX纠缠的线路 gene_cx_layer 3. 生成RZ RY RZ + CRY纠缠的线路 gene_cRy_layer 4. QNNLayer类,可控参数有: - 数据输入维度 dim, - 纠缠层的类型 layer_type "cx" 或 "cRy", - 层数 num_layers, - 测量前是否有旋转门 final_ry=False - 模拟器后端(mindquantum从8.0之后实现了"mqvector"支持), backend="mqvector" ### qnn_binary.py 实现二分类, 把train包装成函数, 并写好log输出, 循环对45种二分类跑结果。 里面已经包含了测试集上的performance 主要resize, epoch是可调节的内容 运行时,需要在命令行指定参数, 1. dataset: mnist or fashion 2. resize: 4, 8, 16, 32 3. finalry: 1-true or 0-false ### qnn_binary_.py 不设置final_ry参数,先训练好不带ry的之后,再fine-tun一下。fine-tune的结果不会变化 ### src.utils_polt.py 1. 从result中加载对应的数据, 转化为画heatmap的形状, load_acc 2. 只针对二分类的45个结果, 画heatmap图。plot_heatmap 3. 给定数据path, 画acc变化曲线, loss变化曲线 ### plot.ipynb 1. 画二分类的45个结果的热力图。load_acc + plot_heatmap 2. 画当前路径数据的epoch变化曲线 plot_epoch ## 多分类 创建多个而二分类器,使用superposition之后的数据进行训练 MNIST 数据集使用的是16分辨率,Fashion MNIST使用的是32分辨率 ### qnn_multi.py 实现使用多个二分类器进行多分类, 写好log输出, 并保存模型。 只有每一个二分类模型对训练集的结果, 整体的测试结果在eval.py中写。 运行时,需要在命令行指定参数, 1. dataset: mnist or fashion 2. resize: 4, 8, 16, 32 3. finalry: 1-true or 0-false 4. datatype: MA or AM ### eval_multi.py 实现多分类器的测试集验证。 运行时,需要在命令行指定参数, 1. dataset: mnist or fashion 2. resize: 4, 8, 16, 32 3. finalry: 1-true or 0-false 4. datatype: MA or AM ### qnn_multi_biased.py 实现使用多个二分类器进行多分类, 写好log输出, 并保存模型。 只有每一个二分类模型对训练集的结果, 整体的测试结果在eval.py中写。 运行时,需要在命令行指定参数, 1. dataset: mnist or fashion 2. resize: 4, 8, 16, 32 3. finalry: 1-true or 0-false ### eval_multi_biased.py 实现多分类器的测试集验证。 运行时,需要在命令行指定参数, 1. dataset: mnist or fashion 2. resize: 4, 8, 16, 32 3. finalry: 1-true or 0-false ## Citation If you find our work helpful, feel free to give us a cite. ``` @article{BAI2024378, title = {Superposition-enhanced quantum neural network for multi-class image classification}, journal = {Chinese Journal of Physics}, volume = {89}, pages = {378-389}, year = {2024}, issn = {0577-9073}, doi = {https://doi.org/10.1016/j.cjph.2024.03.026}, url = {https://www.sciencedirect.com/science/article/pii/S0577907324001151}, author = {Qi Bai and Xianliang Hu} } ```