paddle_quantum.dataset

数据集的功能实现。

class Dataset

基类: object

所有数据集的基类,集成了多种量子编码方法。

data2circuit(classical_data, encoding, num_qubits, can_describe_dimension, split_circuit, return_state: bool, is_image=False)

将输入的经典数据 classical_data 用编码方式 encoding 编码成量子态,这里的经典数据经过了截断或者补零,因而可以正好被编码。

参数:
  • classical_data (list) – 待编码的向量,经过了截断或者补零,刚好可以被编码。

  • encoding (str) – 编码方式,参见 MNIST 编码注释。

  • num_qubits (int) – 量子比特数目。

  • can_describe_dimension (int) – encoding 编码方式可以编码的数目。

  • split_circuit (bool) – 是否切分电路。

  • return_state (bool) – 是否返回量子态。

  • is_image (bool, optional) – 是否是图片,如果是图片,归一化方法不同。

抛出:

Exception – 暂不支持返回 amplitude encoding 的电路。

返回:

如果 return_state == True ,返回编码后的量子态,否则返回编码的电路。

返回类型:

list

filter_class(x, y, classes, data_num, need_relabel, seed=0)

将输入的 x , y 按照 classes 给出的类别进行筛选,数目为 data_num

参数:
  • x (Union[list, np.ndarray]) – 样本的特征。

  • y (Union[list, np.ndarray]) – 样本标签。

  • classes (list) – 需要筛选的类别。

  • data_num (int) – 筛选出来的样本数目。

  • need_relabel (bool) – 将原有类别按照顺序重新标记为 0、1、2 等新的名字,比如传入 [1,2] , 重新标记之后变为 [0,1] 主要用于二分类。

  • seed (int, optional) – 随机种子,默认为 0

返回:

包含如下元素:

  • new_x: 筛选出的特征

  • new_y: 对应于 new_x 的标签

返回类型:

Tuple[list]

class VisionDataset(figure_size)

基类: paddle_quantum.dataset.Dataset

图片数据集类,通过继承 VisionDataset 类,用户可以快速生成自己的图片量子数据。

参数:

figure_size (int) – 图片大小,也就是长和高的数值。

encode(feature, encoding, num_qubits, split_circuit, downscaling_method='resize', target_dimension=-1, return_state=True, full_return=False)

feature 编码到 num_qubits 量子比特中,再降维到 target_dimension 后使用 encodingfeature 是一维的图像向量。

参数:
  • feature (Union[list, np.ndarray]) – 一维图片向量组成的list/ndarray。

  • encoding (str) – angle_encoding 表示角度编码,一个量子比特编码一个旋转门; amplitude_encoding 表示振幅编码; pauli_rotation_encoding 表示SU(3)的角度编码; 还有 linear_entangled_encoding , real_entangled_encoding , complex_entangled_encodingIQP_encoding 编码。

  • num_qubits (int) – 编码后的量子比特数目。

  • split_circuit (bool, optional) – 是否需要切分电路。除了振幅之外的所有电路都会存在堆叠的情况,如果选择 True 就将块与块分开,默认为 False

  • downscaling_method (str, optional) – 包括 PCAresize, 默认为 resize

  • target_dimension (int, optional) – 降维之后的尺度大小,如果是 PCA ,不能超过图片大小;如果是 resize ,不能超过原图大小,默认为 -1

  • return_state (bool, optional) – 是否返回量子态,如果是 False 返回量子电路,默认为 True

  • full_return (bool, optional) – 是否返回原始图像, 经典图像矢量, 量子态和量子电路, 默认为 False

抛出:
  • Exception – PCA维度应小于图片大小。

  • Exception – 调整大小的尺寸应该是一个平方数。

  • Exception – 缩小尺寸的方法只能是 resize 和 PCA。

  • Exception – 无效的编码方法。

返回:

包含如下元素:

  • quantum_image_states: 量子态,只有 full_return==True 或者 return_state==True 的时候会返回。

  • quantum_image_circuits: 所有特征编码的电路,只有 full_return==False 或者 return_state==True 的时候会返回。

  • 图片经过类别过滤,但是还没有降维、补零的特征,是一个一维向量(可以 reshape 成图片),只有 return_state==True 的时候会返回。

  • 经过类别过滤和降维、补零等操作之后的特征,并未编码为量子态,只有 return_state==True 的时候会返回。

返回类型:

Tuple[paddle.Tensor, list, np.ndarray, np.ndarray]

class MNIST(mode, encoding, num_qubits, classes, data_num=-1, split_circuit=False, downscaling_method='resize', target_dimension=-1, need_cropping=True, need_relabel=True, return_state=True, seed=0)

基类: paddle_quantum.dataset.VisionDataset

MNIST 数据集,它继承了 VisionDataset 图片数据集类。

参数:
  • mode (str) – 数据模式,包括 traintest

  • encoding (str) – angle_encoding 表示角度编码,一个量子比特编码一个旋转门; amplitude_encoding 表示振幅编码; pauli_rotation_encoding 表示SU(3)的角度编码; 还有 linear_entangled_encoding , real_entangled_encoding , complex_entangled_encodingIQP_encoding 编码。

  • num_qubits (int) – 编码后的量子比特数目。

  • classes (list) – 用列表给出需要的类别,类别用数字标签表示。

  • data_num (int, optional) – 使用的数据量大小, 默认为 -1

  • split_circuit (bool, optional) – 是否需要切分电路。除了振幅之外的所有电路都会存在堆叠的情况,如果选择 True 就将块与块分开。

  • downscaling_method (str, optional) – 包括 PCAresize。默认为 resize

  • target_dimension (int, optional) – 降维之后的尺度大小,如果是 PCA ,不能超过图片大小;如果是 resize ,不能超过原图大小。

  • need_cropping (bool, optional) – 是否需要裁边,如果为 True ,则从 image[0:27][0:27] 裁剪为 image[4:24][4:24]

  • need_relabel (bool, optional) – 将原有类别按照顺序重新标记为 0, 1, 2 等新的名字,比如传入 [1,2] ,重新标记之后变为 [0,1] ,主要用于二分类。

  • return_state (bool, optional) – 是否返回量子态,如果是 False 返回量子电路。

  • seed (int, optional) – 筛选样本的随机种子,默认为 0

抛出:

Exception – 数据模式只能为训练和测试。

class FashionMNIST(mode, encoding, num_qubits, classes, data_num=-1, split_circuit=False, downscaling_method, target_dimension=-1, need_relabel=True, return_state=True, seed=0)

基类: paddle_quantum.dataset.VisionDataset

FashionMNIST 数据集,它继承了 VisionDataset 图片数据集类。

参数:
  • mode (str) – 数据模式,包括 traintest

  • encoding (str) – angle_encoding 表示角度编码,一个量子比特编码一个旋转门; amplitude_encoding 表示振幅编码; pauli_rotation_encoding 表示SU(3)的角度编码; 还有 linear_entangled_encoding , real_entangled_encoding , complex_entangled_encodingIQP_encoding 编码。

  • num_qubits (int) – 编码后的量子比特数目。

  • classes (list) – 用列表给出需要的类别,类别用数字标签表示。

  • data_num (int, optional) – 使用的数据量大小,默认为 -1

  • split_circuit (bool, optional) – 是否需要切分电路。除了振幅之外的所有电路都会存在堆叠的情况,如果选择 True 就将块与块分开, 默认为 False

  • downscaling_method (str, optional) – 包括 PCAresize,默认为 resize

  • target_dimension (int, optional) – 降维之后的尺度大小,如果是 PCA ,不能超过图片大小;如果是 resize ,不能超过原图大小, 默认为 -1

  • need_relabel (bool, optional) – 将原有类别按照顺序重新标记为 0, 1, 2 等新的名字,比如传入 [1,2] ,重新标记之后变为 [0,1] ,主要用于二分类, 默认为 True

  • return_state (bool, optional) – 是否返回量子态,如果是 False 返回量子电路, 默认为 True

  • seed (int, optional) – 筛选样本的随机种子,默认为 0

抛出:

Exception – 数据模式只能为训练和测试。

class SimpleDataset(dimension)

基类: paddle_quantum.dataset.Dataset

用于不需要降维的简单分类数据。用户可以通过继承 SimpleDataset ,将自己的分类数据变为量子态。下面的几个属性也会被继承。

参数:

dimension (int) – 编码数据的维度。

encode(feature, encoding, num_qubits, return_state=True, full_return=False)

num_qubits 的量子比特对 feature 进行编码 encoding

参数:
  • feature (Union[list, np.ndarray]) – 编码的特征,每一个分量都是一个 ndarray 的特征向量。

  • encoding (str) – 编码方法。

  • num_qubits (int) – 编码的量子比特数目。

  • return_state (bool, optional) – 是否返回量子态,默认为 True

  • full_return (bool, optional) – 是否返回原始图像, 经典图像矢量, 量子态和量子电路, 默认为 False

抛出:
  • Exception – 无效特征类型。

  • Exception – 无效编码方式。

  • Exception – 量子比特数不足。

返回:

包含如下元素:

  • quantum_states: 量子态,只有 full_return==True 或者 return_state==True 的时候会返回。

  • quantum_circuits: 所有特征编码的电路,只有 full_return==False 或者 return_state==True 的时候会返回。

  • origin_feature: 经过类别过滤之后的所有特征,并未编码为量子态,只有 return_state==True 的时候会返回。

  • feature: origin_feature 经过了补零之后的特征, quantum_states 就是将 feature 编码之后的结果。 只有 return_state==True 的时候会返回。

返回类型:

Tuple[np.ndarray, list, np.ndarray, np.ndarray]

class Iris(encoding: str, num_qubits: int, classes: list, test_rate: float = 0.2, need_relabel=True, return_state=True, seed=0)

基类: paddle_quantum.dataset.SimpleDataset

Iris 数据集。

参数:
  • encoding (str) – angle_encoding 表示角度编码,一个量子比特编码一个旋转门; amplitude_encoding 表示振幅编码; pauli_rotation_encoding 表示SU(3)的角度编码; 还有 linear_entangled_encoding , real_entangled_encoding , complex_entangled_encodingIQP_encoding 编码。

  • num_qubits (int) – 量子比特数目。

  • classes (list) – 用列表给出需要的类别,类别用数字标签表示。

  • test_rate (float, optional) – 测试集的占比, 默认为 0.2

  • need_relabel (bool, optional) – 将原有类别按照顺序重标记为 0、1、2 等新的名字,比如传入 [1,2] ,重标记之后变为 [0,1] ,主要用于二分类。默认为 True

  • return_state (bool, optional) – 是否返回量子态,默认为 True

  • seed (int, optional) – 筛选样本的随机种子,默认为 0

class BreastCancer(encoding, num_qubits, test_rate=0.2, return_state=True, seed=0)

基类: paddle_quantum.dataset.SimpleDataset

BreastCancer 数据集。

参数:
  • encoding (_type_) – angle_encoding 表示角度编码,一个量子比特编码一个旋转门; amplitude_encoding 表示振幅编码; pauli_rotation_encoding 表示SU(3)的角度编码; 还有 linear_entangled_encoding , real_entangled_encoding , complex_entangled_encodingIQP_encoding 编码。

  • num_qubits (_type_) – 量子比特数目。

  • test_rate (float, optional) – 测试集的占比, 默认为 0.2

  • return_state (bool, optional) – 是否返回量子态,默认为 True

  • seed (int, optional) – 筛选样本的随机种子,默认为 0