Pennylane学习笔记(1)-学习目标

前言

  学习语言的过程中,需要不断地回顾和练习,加深记忆,从而融会贯通。本系列一方面是加深对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

猜你喜欢

转载自blog.csdn.net/u010072043/article/details/129235880