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]