paddle_quantum.qml.qsann

量子自注意力神经网络(Quantum Self-Attention Neural Network, QSANN)模型

generate_observable(num_qubits, num_terms)

生成测量量子态所需要的可观测量。

参数:
  • num_qubits (int) – 量子比特的数量。

  • num_terms (int) – 生成的可观测量的项数。

返回:

返回生成的可观测量。

返回类型:

paddle_quantum.Hamiltonian

class QSANN(num_qubits, len_vocab, num_layers, depth_ebd, depth_query, depth_key, depth_value)

基类:paddle.nn.Layer

量子自注意力神经网络(Quantum Self-Attention Neural Network, QSANN)模型的实现。具体细节可以参考:https://arxiv.org/abs/2205.05625

参数:
  • num_qubits (int) – 量子电路所包含的量子比特的数量。

  • len_vocab (int) – 数据集的词表的长度。

  • num_layers (int) – 自注意力层的层数。

  • depth_ebd (int) – embedding 电路的深度。

  • depth_query (int) – query 电路的深度。

  • depth_key (int) – key 电路的深度。

  • depth_value (int) – value 电路的深度。

forward(batch_text)

模型的前向执行函数。

参数:

batch_input (List[List[int]]) – 模型的输入,它是一个列表,每一项都是一个由整数组成的列表。

返回:

返回一个列表,其每一项都是对输入文本的预测结果。

返回类型:

List[paddle.Tensor]

deal_vocab(vocab_path)

根据输入的词汇表文件,得到从词到索引的映射。

参数:

vocab_path (str) – 词表文件的路径。

返回:

返回从词到对应的索引的映射。

返回类型:

Dict[str, int]

class TextDataset(file_path, word_idx, pad_size)

基类:paddle.io.Dataset

实现文本数据集的类。

参数:
  • file_path (str) – 数据集的文件路径。其里面应该由多行组成。每一行包含文本标签,由制表符或空格分开。

  • word2idx (dict) – 数据集的数据量大小。默认为 0 ,表示使用所有数据。

  • pad_size (int) – 要将文本序列填充到的长度。默认为 0 ,即不进行填充。

build_iter(dataset, batch_size, shuffle)

建立批数据的可迭代类型。

参数:
  • dataset (paddle.io.Dataset) – 输入的数据集,对其进行构建批数据的可迭代类型。

  • batch_size (int) – 批数据的大小。

  • shuffle (bool) – 是否要随机打乱数据。默认为 Flase ,即不随机打乱。

返回:

构建的可迭代类型,其中包含生成的批数据。

返回类型:

list

train(model_name, dataset, num_qubits, num_layers, depth_ebd, depth_query, depth_key, depth_value, batch_size, num_epochs, learning_rate, saved_dir, using_validation, early_stopping)

训练 VSQL 模型的函数。

参数:
  • model_name (str) – 模型的名字,用于作为保存的模型参数的文件名。

  • dataset (str) – 模型的名字,用于作为保存的模型参数的文件名。

  • num_qubits (int) – 量子电路所包含的量子比特的数量。

  • num_layers (int) – 自注意力层的层数。

  • depth_ebd (int) – embedding 电路的深度。

  • depth_query (int) – query 电路的深度。

  • depth_key (int) – key 电路的深度。

  • depth_value (int) – value 电路的深度。

  • batch_size (int) – 数据的批大小。

  • num_epochs (int) – 训练的轮数。

  • learning_rate (float) – 更新参数的学习率,默认为 0.01

  • saved_dir (str) – 训练得到的模型文件的保存路径,默认使用当前目录。

  • using_validation (bool) – 是否使用验证集。默认为 False ,即不包含验证集。

  • early_stopping (int) – 默认为 1000 ,即如果模型在 1000 次迭代中,在验证集上的 loss 没有提升,则会自动停止训练。

evaluate(model, data_loader)

对模型进行评估。

参数:
  • model (paddle.nn.Layer) – 训练得到的模型,用于被评估。

  • data_loader (list) – 用于评估模型的数据加载器。

返回:

返回模型在输入数据上的平均的损失值和平均准确率。

返回类型:

Tuple[float, float]

test(model, model_path, test_loader)

使用测试集对模型进行测试。

参数:
  • model (paddle.nn.Layer) – 训练得到的模型,用于被评估。

  • model_path (str) – 保存的模型参数的文件路径。

  • test_loader (list) – 测试集的数据加载器。

inference(text, model_path, vocab_path, classes, num_qubits, num_layers, depth_ebd, depth_query, depth_key, depth_value)

推理函数。使用训练好的模型对输入的图片进行预测。

参数:
  • text (str) – 要预测的图片的路径。

  • model_path (str) – 保存的模型参数的文件路径。

  • vocab_path (str) – 词表文件的路径。

  • classes (List[str]) – 要预测的文本的类别。

  • num_qubits (int) – 量子电路所包含的量子比特的数量。

  • num_layers (int) – 自注意力层的层数。

  • depth_ebd (int) – embedding 电路的深度。

  • depth_query (int) – query 电路的深度。

  • depth_key (int) – key 电路的深度。

  • depth_value (int) – value 电路的深度。

返回:

返回模型预测的类别。

返回类型:

str