paddle_quantum.qml.qcaan

量子电路关联对抗网络(Quantum-Circuit Associative Adversarial Network, QCAAN)模型

Data_Load()

加载 MNIST 数据集

返回:

MNIST 数据集

返回类型:

paddle.vision.datasets.MNIST

class ConvBlock(shape, in_channels, out_channels, kernel_size=3, stride=1, padding=1, activation=None, normalize=True)

基类:paddle.nn.Layer

建立神经网络的卷积块。 每一个卷积块包含若干卷积层、Silu 激活层、层归一化层;并且卷积块保持空间维度不变,即图片的宽和高不变,只改变通道数。

参数:
  • shape (List[int]) – 层归一化的形状

  • in_channels (int) – 输入通道数

  • out_channels (int) – 输出通道数

  • kernel_size (int) – 卷积核的大小

  • stride (int) – stride 的规模

  • padding (int) – padding 的规模

  • activation (nn.Layer) – 激活函数

  • normalize (bool) – 指示是否使用层归一化的标记

forward(x)

前向执行函数

参数:

x (paddle.Tensor) – 输入张量

返回:

输出张量

返回类型:

paddle.Tensor

class Generator(latent_dim=16)

基类:paddle.nn.Layer

生成器网络

参数:

latent_dim (int) – 隐藏特征维度

forward(x)

前向执行函数

参数:

x (paddle.Tensor) – 输入张量

返回:

输出张量

返回类型:

paddle.Tensor

class Discriminator(latent_dim=16)

基类:paddle.nn.Layer

判别器网络

参数:

latent_dim (int) – 隐藏特征维度

forward(x)

前向执行函数

参数:

x (paddle.Tensor) – 输入张量

返回:

输出张量

返回类型:

paddle.Tensor

generate_pauli_string_list(num_qubits, num_terms)

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

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

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

返回:

返回生成的可观测量。

返回类型:

List[list]

class QCBM(num_qubits, num_depths, latent_dim=16)

基类:paddle.nn.Layer

量子玻尔兹曼机,这里即等价于量子神经网络。

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

  • num_depths (int) – complex entangled layers 的层数

  • latent_dim (int) – 隐藏特征维度

forward()

前向执行函数

返回:

输出在一系列哈密顿量上的观测值,即在 Z0, Z1, …, X0, X1, …, Y0, Y1, …

返回类型:

paddle.Tensor

prior_sampling(expec_obs, batch_size)

模拟从 QCBM 中采样先验概率的过程。

参数:
  • expec_obs (paddle.Tensor) – 一系列观测值组成的向量,长度等于隐藏特征维度

  • batch_size (int) – 一个 batch 中的样本数

返回:

采样结果,值在 {-1, 1}中。

返回类型:

paddle.Tensor

train(num_qubits=8, num_depths=4, lr_qnn=0.005, batch_size=128, latent_dim=16, epochs=21, lr_g=0.0002, lr_d=0.0002, beta1=0.5, beta2=0.9, manual_seed=888)

训练 QCAAN 模型的函数。

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

  • num_depths (int) – complex entangled layers 的层数。

  • lr_qnn (paddle.float32) – 更新QNN中参数的学习率。

  • batch_size (int) – 每一步迭代中的批大小。

  • latent_dim (int) – 隐藏特征维度。

  • epochs (int) – 训练模型需要的 epoch 数目。

  • lr_g (paddle.float32) – 更新生成器的学习率。

  • lr_d (paddle.float32) – 更新判别器的学习率。

  • beta1 (paddle.float32) – 用于生成器和判别器的Adam 中的 beta1 参数。

  • beta2 (paddle.float32) – 用于生成器和判别器的Adam 中的 beta2 参数。

  • manual_seed (int) – 用于可复现的人工种子。

model_test(latent_dim=16, params_path='params', num_qubits=8, num_depths=4, manual_seed=20230313)

加载训练好的 QCAAN 模型参数,生成一些新图。最后存储这些图片。

参数:
  • latent_dim (int) – 隐藏特征维度

  • params_path (str) – 加载模型参数的路径。

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

  • num_depths (int) – complex entangled layers 的层数。

  • manual_seed (int) – 用于可复现的人工种子。