paddle_quantum.qml.vsql
变分影子量子学习(variational shadow quantum learning, VSQL)模型。
- image_process(images, num_qubits)
对输入的图片进行归一化。先将图片展开为向量,再进行归一化。
- 参数:
images (numpy.ndarray) – 输入的图片。
num_qubits (int) – 量子比特的数量,决定了归一化向量的维度。
- 返回:
返回归一化之后的向量,它是由
paddle.Tensor
组成的列表。- 返回类型:
numpy.ndarray
- class ImageDataset(file_path, num_samples, transform)
基类:
paddle.io.Dataset
实现图片数据集的类。
- 参数:
file_path (str) – 数据集的文件路径。其里面应该由多行组成。每一行包含图片的文件路径和标签,由制表符分开。
num_samples (int) – 数据集的数据量大小。默认为
0
,表示使用所有数据。transform (Optional[Callable]) – 对图片进行预处理的方法。默认为
None
,即不进行任何预处理。
- generate_observable(start_idx, num_shadow)
生成测量量子态所需要的可观测量。
- 参数:
start_idx (int) – 要测量的量子比特的起始索引。
num_shadow (int) – 影子电路所包含的量子比特的数量。
- 返回:
返回生成的可观测量。
- 返回类型:
paddle_quantum.Hamiltonian
- class VSQL(num_qubits, num_shadow, num_classes, depth)
基类:
paddle.nn.Layer
变分影子量子学习(variational shadow quantum learning, VSQL)模型的实现。具体细节可以参考:https://ojs.aaai.org/index.php/AAAI/article/view/17016 。
- 参数:
num_qubits (int) – 量子电路所包含的量子比特的数量。
num_shadow (int) – 影子电路所包含的量子比特的数量。
num_classes (int) – 模型所要分类的类别的数量。
depth (Optional[int]) – 量子电路的深度,默认为
1
。
- forward(batch_input)
模型的前向执行函数。
- 参数:
batch_input (List[paddle.Tensor]) – 模型的输入,其形状为 \((\text{batch_size}, 2^{\text{num_qubits}})\) 。
- 返回:
返回模型的输出,其形状为 \((\text{batch_size}, \text{num_classes})\) 。
- 返回类型:
paddle.Tensor
- train(model_name, num_qubits, num_shadow, classes, batch_size, num_epochs, depth, datasets, saved_dir, learning_rate, using_validation, num_workers, early_stopping, num_train, num_dev, num_test)
训练 VSQL 模型的函数。
- 参数:
model_name (str) – 模型的名字,用于作为保存的模型参数的文件名。
num_qubits (int) – 量子电路所包含的量子比特的数量。
num_shadow (int) – 影子电路所包含的量子比特的数量。
classes (list) – 要预测的图片的类别。
batch_size (int) – 数据的批大小。
num_epochs (int) – 训练的轮数。
depth (int) – 量子电路的深度,默认为
1
。datasets (str) – 训练所使用的数据集文件夹路径。默认为
MNIST
,即使用内置的 MNIST 数据集。saved_dir (str) – 训练得到的模型文件的保存路径,默认使用当前目录。
learning_rate (float) – 更新参数的学习率,默认为
0.01
。using_validation (bool) – 是否使用验证集。默认为
False
,即不包含验证集。num_workers (int) – 构建数据集加载器的线程数,默认为
0
,即不使用额外线程。early_stopping (int) – 默认为
1000
,即如果模型在 1000 次迭代中,在验证集上的 loss 没有提升,则会自动停止训练。num_train (int) – 训练集的数据量。默认为
0
,即使用所有的训练数据。num_dev (int) – 验证集的数据量。默认为
0
,即使用所有的训练数据。num_test (int) – 测试集的数据量。默认为
0
,即使用所有的训练数据。
- evaluate(model, data_loader)
对模型进行评估。
- 参数:
model (paddle.nn.Layer) – 训练得到的模型,用于被评估。
data_loader (paddle.io.DataLoader) – 用于评估模型的数据集的 dataloader。
- 返回:
返回模型在输入数据上的平均的损失值和平均准确率。
- 返回类型:
Tuple[float, float]
- test(model, model_path, test_loader)
使用测试集对模型进行测试。
- 参数:
model (paddle.nn.Layer) – 训练得到的模型,用于被评估。
model_path (str) – 保存的模型参数的文件路径。
test_loader (paddle.io.DataLoader) – 测试集的 dataloader。
- inference(image_path, is_dir, model_path, num_qubits, num_shadow, classes, depth)
推理函数。使用训练好的模型对输入的图片进行预测。
- 参数:
image_path (str) – 要预测的图片的路径。
is_dir (bool) – 所输入的
image_path
是否为文件夹路径。如果是文件夹路径,则会对文件夹下的所有图片都进行预测。model_path (str) – 保存的模型参数的文件路径。
num_qubits (int) – 量子电路所包含的量子比特的数量。
num_shadow (int) – 影子电路所包含的量子比特的数量。
classes (list) – 要预测的图片的类别。
depth (int) – 量子电路的深度,默认为
1
。
- 返回:
返回模型预测的类别,以及模型对每个类别的置信度。
- 返回类型:
Tuple[int, list]