paddle_quantum.gradtool

梯度分析工具的功能实现。

show_gradient(circuit, loss_func, ITR, LR, *args)

计算量子神经网络中各可变参数的梯度值和损失函数值。

参数:
  • circuit (Circuit) – 要训练的量子神经网络。

  • loss_func (Callable[[Circuit, Any], paddle.Tensor]) – 计算该量子神经网络损失值的函数。

  • ITR (int) – 训练的次数。

  • LR (float) – 学习训练的速率。

  • *args (Any) – 用于损失函数计算的额外参数列表。

返回:

包含如下两个元素: - loss_list: 损失函数值随训练次数变化的列表。 - grad_list: 各参数梯度随训练次变化的列表。

返回类型:

Tuple[List[float], List[float]]

plot_distribution(grad)

根据输入的梯度的列表,画出梯度的分布图。

参数:

grad (np.ndarray) – 量子神经网络某参数的梯度列表。

random_sample(circuit, loss_func, sample_num, *args, mode, if_plot, param)

对模型进行随机采样,根据不同的计算模式,获得对应的平均值和方差。

参数:
  • circuit (Circuit) – 要训练的量子神经网络。

  • loss_func (Callable[[Circuit, Any], paddle.Tensor]) – 计算该量子神经网络损失值的函数。

  • sample_num (int) – 随机采样的次数

  • mode (string) – 随机采样后的计算模式,默认为 'single'

  • if_plot (boolean) – 是否对梯度进行画图,默认为 True

  • param (int) – 'single' 模式中对第几个参数进行画图,默认为 0,即第一个参数。

  • *args (Any) – 用于损失函数计算的额外参数列表。

备注

在本函数中提供了三种计算模式,mode 分别可以选择 'single', 'max', 以及 'random'
  • mode=’single’: 表示计算电路中的每个可变参数梯度的平均值和方差。

  • mode=’max’: 表示对电路中每轮采样的所有参数梯度的最大值求平均值和方差。

  • mode=’random’: 表示对电路中每轮采样的所有参数随机取一个梯度,求平均值和方差。

返回:

包含如下两个元素: - loss_list: 损失函数值随训练次数变化的列表。 - grad_list: 各参数梯度随训练次变化的列表。

返回类型:

Tuple[List[float], List[float]]

plot_loss_grad(circuit, loss_func, ITR, LR, *args)

绘制损失值和梯度随训练次数变化的图。

参数:
  • circuit (Circuit) – 传入的参数化量子电路,即要训练的量子神经网络。

  • loss_func (Callable[[Circuit, Any], paddle.Tensor]) – 计算该量子神经网络损失值的函数。

  • ITR (int) – 训练的次数。

  • LR (float) – 学习训练的速率。

  • *args (Any) – 用于损失函数计算的额外参数列表。

plot_supervised_loss_grad(circuit, loss_func, N, EPOCH, LR, BATCH, TRAIN_X, TRAIN_Y, *args)

绘制监督学习中损失值和梯度随训练次数变化的图。

参数:
  • circuit (Circuit) – 要训练的量子神经网络。

  • loss_func (Callable[[Circuit, Any], paddle.Tensor]) – 计算该量子神经网络损失值的函数。

  • N (int) – 量子比特的数量。

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

  • LR (float) – 学习训练的速率。

  • BATCH (int) – 训练时 batch 的大小。

  • TRAIN_X (paddle.Tensor) – 训练数据集。

  • TRAIN_Y (list) – 训练数据集的标签。

  • *args (Any) – 用于损失函数计算的额外参数列表。

抛出:

Exception – 训练数据必须是 paddle.Tensor 类型

返回:

包含如下两个元素: - loss_list: 损失函数值随训练次数变化的列表。 - grad_list: 各参数梯度随训练次变化的列表。

返回类型:

Tuple[List[float], List[float]]

random_sample_supervised(circuit, loss_func, N, sample_num, BATCH, TRAIN_X, TRAIN_Y, *args: Any, mode:='single', if_plot:=True, param:=0)

对监督学习模型进行随机采样,根据不同的计算模式,获得对应的平均值和方差。

参数:
  • circuit (Circuit) – 要训练的量子神经网络。

  • loss_func (Callable[[Circuit, Any], paddle.Tensor]) – 计算该量子神经网络损失值的函数。

  • N (int) – 量子比特的数量。

  • sample_num (int) – 随机采样的次数。

  • BATCH (int) – 训练时 batch 的大小。

  • TRAIN_X (paddle.Tensor) – 训练数据集。

  • TRAIN_Y (list) – 训练数据集的标签。

  • mode (string) – 随机采样后的计算模式,默认为 'single'

  • if_plot (boolean) – 是否对梯度进行画图,默认为 True

  • param (int) – Single 模式中对第几个参数进行画图,默认为 0,即第一个参数。

  • *args (Any) – 用于损失函数计算的额外参数列表。

抛出:

Exception – 训练数据必须是 paddle.Tensor 类型

备注

在本函数中提供了三种计算模式,mode 分别可以选择 'single', 'max', 以及 'random'
  • mode=’single’: 表示计算电路中的每个可变参数梯度的平均值和方差。

  • mode=’max’: 表示对电路中每轮采样的所有参数梯度的最大值求平均值和方差。

  • mode=’random’: 表示对电路中每轮采样的所有参数随机取一个梯度,求平均值和方差。

返回:

包含如下两个元素: - loss_list: 损失函数值随训练次数变化的列表。 - grad_list: 各参数梯度随训练次变化的列表。

返回类型:

Tuple[List[float], List[float]]