Tensorflow-Quantum含参量子线路可观测量定义与期望计算

这篇博客介绍了如何使用TensorFlow-Quantum进行量子线路的构建,包括设置可观测量和计算期望值。首先,展示了如何构造一个量子线路,包含两个U3门,并定义了一个可观测量。接着,通过TensorFlow-Quantum的期望值计算层,使用有限差分法求取期望值的梯度。最后,给出了一个随机参数的期望值计算实例,展示了期望值的计算过程和梯度的求取结果。
摘要由CSDN通过智能技术生成

1.1. Tensorflow-Quantum 可观测量构造

import cirq
obersv = 0
obersv += 0.5 * (cirq.Z(bits[0]) * cirq.Z(bits[1])) + 1 * (cirq.Z(bits[2]) * cirq.Z(bits[3]))
print(obersv)

0.500Z((0, 0)) * Z((0, 1))+1.000Z((0, 2)) * Z((0, 3))

搭建含参数量子线路(单量子比特,2个U3门,共6个参数)

import sympy

param_num_train = 6
train_syms = sympy.symbols('t0:%d' % param_num_train)

qubits = cirq.GridQubit.rect(1, 1)
circuit= cirq.Circuit()
circuit+= cirq.rz(train_syms [0]).on(qubits[0])
circuit+= cirq.ry(train_syms [1]).on(qubits[0])
circuit+= cirq.rz(train_syms [2]).on(qubits[0])

circuit+= cirq.rz(train_syms [3]).on(qubits[0])
circuit+= cirq.ry(train_syms [4]).on(qubits[0])
circuit+= cirq.rz(train_syms [5]).on(qubits[0])

1.2. Tensorflow-Quantum 期望计算

import tensorflow as tf
import tensorflow_quantum as tfq
import numpy as np

#解析期望、有限差分求梯度
ideal_expectation_calculation = tfq.layers.Expectation(
    differentiator=tfq.differentiators.ForwardDifference(grid_spacing=0.01))

#采样期望、参数移位求梯度
#sampled_expectation_calculation  = tfq.layers.SampledExpectation(
#    differentiator=tfq.differentiators.ParameterShift())

value = np.random.uniform(-2 * np.pi, 2 * np.pi, param_num_train).tolist()
train_values_tensor =  tf.convert_to_tensor([value], dtype='float32')

#测量第一个量子比特,可观测量设置为H = |0><0|=0.5(I+Z)
obersv = 0.5 * (cirq.Z(bits[0]) + cirq.I(bits[0]))

#计算期望
sampled_exp_outputs = ideal_expectation_calculation(circuit,
                                                    operators=obersv,
                                                    #                         repetitions=2000,
                                                    symbol_names= train_syms,
                                                    symbol_values= train_values_tensor)
print(sampled_exp_outputs)

tf.Tensor([[0.36264282]], shape=(1, 1), dtype=float32)

1.3. Tensorflow-Quantum 期望梯度计算

with tf.GradientTape() as g:
    g.watch(train_values_tensor) #追踪train_value_tensor的梯度
    #计算期望
    sampled_exp_outputs = ideal_expectation_calculation(circuit,
                                                        operators=obersv,
                                                        #                         repetitions=2000,
                                                        symbol_names= train_syms,
                                                        symbol_values= train_values_tensor)
#计算梯度
sampled_finite_diff_gradients = g.gradient(sampled_exp_outputs, train_values_tensor)

tf.Tensor(
[[-7.6293945e-06 -7.7865601e-02 1.6986847e-02 1.6994476e-02
4.8110962e-01 0.0000000e+00]], shape=(1, 6), dtype=float32)

由于初始value是随机产生,计算出的结果不一定与示例结果一致。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值