前言
学习语言的过程中,需要不断地回顾和练习,加深记忆,从而融会贯通。本系列一方面是加深对Pennylane编程逻辑的理解,另一方面希望同样在学习Pennylane的朋友可以相互交流,共同进步,后面会逐步更新我目前正在学习的内容,如有描述方面的错误,还请大家多多指正!
Pennylane基础语法
一、Pennylane中的测量
Pennylane中一类重要的函数功能,是计算输出量子态在某个可观测量下的期望。在代码实现过程中有两种方式
( 1 )在某个 P a u l i 可观测量下量子比特的期望值(可观测量仅为 P a u l i 算符) (1)在某个Pauli可观测量下量子比特的期望值(可观测量仅为Pauli算符) (1)在某个Pauli可观测量下量子比特的期望值(可观测量仅为Pauli算符)
qml.expval(qml.PauliZ(wires=0)) #单量子比特测量
qml.expval(qml.PauliZ(0) @ qml.PauliX(2)) #多量子比特联合测量
( 2 )密度矩阵形式的可观测量测量(可观测量定义更自由) (2)密度矩阵形式的可观测量测量(可观测量定义更自由) (2)密度矩阵形式的可观测量测量(可观测量定义更自由)
label_0 = [[1], [0]]
label_1 = [[0], [1]]
state_labels = np.array([label_0, label_1], requires_grad=False)
qml.expval(qml.Hermitian(density_matrix(state_labels[0]),wires=0)) #state_lables[0] = |0><0|
( 3 )测量多个量子比特,得到测量结果的概率 (3)测量多个量子比特,得到测量结果的概率 (3)测量多个量子比特,得到测量结果的概率
qml.probs(wires=[0, 1])
二、Keras搭建量子神经网络
def layer(W):
qml.Rot(W[0, 0], W[0, 1], W[0, 2], wires=0)
qml.Rot(W[1, 0], W[1, 1], W[1, 2], wires=1)
qml.Rot(W[2, 0], W[2, 1], W[2, 2], wires=2)
qml.Rot(W[3, 0], W[3, 1], W[3, 2], wires=3)
qml.CNOT(wires=[0, 1])
qml.CNOT(wires=[1, 2])
qml.CNOT(wires=[2, 3])
qml.CNOT(wires=[3, 0])
def statepreparation(x):
qml.BasisState(x, wires=[0, 1, 2, 3])
@qml.qnode(dev)
def circuit(inputs, weights):
statepreparation(inputs)
for W in weights:
layer(W)
return qml.expval(qml.PauliZ(0)) #[-1,1]
参考资料
[1] qml.expval(qml.Hermitian(y, wires=[0]))代码出处:Data-reuploading classifier
[2] qml.expval(qml.PauliZ(0))代码出处:qml.qnn.KerasLayer
[3] Pennylane中的测量:Measurements