Path: blob/master/site/zh-cn/quantum/tutorials/qcnn.ipynb
25118 views
Copyright 2020 The TensorFlow Authors.
量子卷积神经网络
设置
安装 TensorFlow Quantum:
现在,导入 TensorFlow 和模块依赖项:
1. 构建 QCNN
1.1 在 TensorFlow 计算图中组装电路
TensorFlow Quantum (TFQ) 提供了专为计算图中的电路构造而设计的层类。一个示例是从 tf.keras.Layer
继承的 tfq.layers.AddCircuit
层。此层可以追加或附加到电路的输入批次,如下图所示。
下面的代码段使用了此层:
检查输入张量:
检查输出张量:
虽然不使用 tfq.layers.AddCircuit
也可以运行下面的示例,但这是一个理解如何将复杂的功能嵌入 TensorFlow 计算图的好机会。
1.2 问题概述
您将准备簇态,并训练一个量子分类器来检测它是否处于“激发”状态。簇态是高度纠缠的,不过,这对经典计算机而言并非难以解决的问题。为了让您更清楚地理解,我们使用的这一数据集比论文中使用的更简单。
对于此分类任务,您将实现一个类似深度 MERA 的 QCNN 架构,因为:
就像 QCNN 一样,环上的簇态具有平移不变性。
簇态是高度纠缠的。
这种架构在减少纠缠方面应该会很有效,通过读出一个量子位来获得分类。
根据定义,“激发”簇态是指将 cirq.rx
门应用到其任何量子位的簇态。Qconv 和 QPool 在本教程的后续部分讨论。
1.3 为 TensorFlow 构建块
使用 TensorFlow Quantum 解决此问题的一种方式是实现以下几点:
模型的输入是一个电路张量,空电路或表明激发的特定量子位上的 X 门。
使用
tfq.layers.AddCircuit
层构造模型的其他量子组件。使用
tfq.layers.PQC
层进行推断。它会读取 ,并将其与激发态的标签 1 或非激发态的标签 -1 进行比较。
1.4 数据
在构建模型之前,您可以生成数据。在本例中,它将是簇态的激发(原论文使用的是一个更复杂的数据集)。激发通过 cirq.rx
门表示。我们将足够大的旋转视为激发,并使用 1
进行标记,不够大的旋转则使用 -1
标记,我们将其视为未激发。
您可以看到,就像使用常规的机器学习一样,您创建了一个用于对模型进行基准测试的训练和测试集。利用以下代码段,您可以快速查看某些数据点:
1.5 定义层
现在,我们在 TensorFlow 中定义上图中显示的层。
显示 cirq.GridQubit
的矩形的一个簇态电路:
要查看您创建的对象,请打印出单量子位酉电路:
以及双量子位酉电路:
以及双量子位池化电路:
1.5.2.1 量子卷积
按照 Cong 和 Lukin 的论文所述,将一维量子卷积定义为对每对步长为 1 的相邻量子位的双量子位参数化酉的应用。
显示(高度水平的)电路:
1.5.2.2 量子池化
量子池化层使用上面定义的双量子位池从 个量子位池化为 个量子位。
检查池化组件电路:
1.6 模型定义
现在,使用定义的层构造纯量子 CNN。首先创建八个量子位,再将其池化为一个量子位,然后测量 。
1.7 训练模型
在整个批次上训练模型以简化此示例。
2. 混合模型
您不必使用量子卷积将八个量子位池化为一个量子位,您可以执行一到两轮的量子卷积,然后将结果馈送到经典神经网络中。本部分探讨量子-经典混合模型。
2.1 使用单个量子滤波器的混合模型
应用一层量子卷积,在后跟密集连接的神经网络的所有位上读出 。
2.1.1 模型定义
2.1.2 训练模型
如您所见,在适当的经典模型的帮助下,混合模型通常比纯量子版本收敛得更快。
2.2 使用多个量子滤波器的混合卷积
现在,我们来试试使用多个量子卷积和一个经典神经网络的架构,将其组合在一起。