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
后使用encoding
。feature
是一维的图像向量。- 参数:
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_encoding
和IQP_encoding
编码。num_qubits (int) – 编码后的量子比特数目。
split_circuit (bool, optional) – 是否需要切分电路。除了振幅之外的所有电路都会存在堆叠的情况,如果选择
True
就将块与块分开,默认为False
。downscaling_method (str, optional) – 包括
PCA
和resize
, 默认为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) – 数据模式,包括
train
和test
。encoding (str) –
angle_encoding
表示角度编码,一个量子比特编码一个旋转门;amplitude_encoding
表示振幅编码;pauli_rotation_encoding
表示SU(3)的角度编码; 还有linear_entangled_encoding
,real_entangled_encoding
,complex_entangled_encoding
和IQP_encoding
编码。num_qubits (int) – 编码后的量子比特数目。
classes (list) – 用列表给出需要的类别,类别用数字标签表示。
data_num (int, optional) – 使用的数据量大小, 默认为
-1
。split_circuit (bool, optional) – 是否需要切分电路。除了振幅之外的所有电路都会存在堆叠的情况,如果选择
True
就将块与块分开。downscaling_method (str, optional) – 包括
PCA
和resize
。默认为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) – 数据模式,包括
train
和test
。encoding (str) –
angle_encoding
表示角度编码,一个量子比特编码一个旋转门;amplitude_encoding
表示振幅编码;pauli_rotation_encoding
表示SU(3)的角度编码; 还有linear_entangled_encoding
,real_entangled_encoding
,complex_entangled_encoding
和IQP_encoding
编码。num_qubits (int) – 编码后的量子比特数目。
classes (list) – 用列表给出需要的类别,类别用数字标签表示。
data_num (int, optional) – 使用的数据量大小,默认为
-1
。split_circuit (bool, optional) – 是否需要切分电路。除了振幅之外的所有电路都会存在堆叠的情况,如果选择
True
就将块与块分开, 默认为False
。downscaling_method (str, optional) – 包括
PCA
和resize
,默认为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_encoding
和IQP_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_encoding
和IQP_encoding
编码。num_qubits (_type_) – 量子比特数目。
test_rate (float, optional) – 测试集的占比, 默认为
0.2
。return_state (bool, optional) – 是否返回量子态,默认为
True
。seed (int, optional) – 筛选样本的随机种子,默认为
0
。