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