使用Tensorflow训练Qiskit回路

问题描述

为了探究是否可以使用张量流训练Qiskit Quantum电路,我建立了一个小型玩具模型。 这种玩具模型的目的是通过张量流找到正确的角度,以获得独立于输入的“零”输出

import numpy as np
import qiskit
from qiskit.circuit import QuantumCircuit,QuantumRegister
import tensorflow as tf
from tensorflow.keras.layers import Input,Dense,Layer

def QuantumCircuit(thetas,n_qubits=1):
   
   simulator = qiskit.Aer.get_backend('qasm_simulator')
   shots=1024

   circuit= qiskit.QuantumCircuit(n_qubits)
   circuit.h(0)
   circuit.ry(float(thetas),0)
   circuit.measure_all()
   
   job = qiskit.execute(circuit,backend=simulator,shots=shots)
   result = job.result().get_counts(circuit)

   counts = np.array(list(result.values()))
   states = np.array(list(result.keys())).astype(float)

   # Compute probabilities for each state
   probabilities = counts / shots
   # Get state expectation
   expectation = np.sum(states * probabilities)

   return np.array(expectation)

class Linear(Layer):
   def __init__(self,units=1,input_dim=1):
       super(Linear,self).__init__()
       self.w = self.add_weight(shape=(input_dim,units),initializer='random_uniform',trainable=True)        
       
   def call(self,inputs,input_dim=1):
       if (tf.executing_eagerly()):
           return QuantumCircuit(self.w)           
       return inputs

x_train = np.arange(10)
y_train = np.array([0,0])

inputs=Input(shape=(1,))
outputs=Linear()(inputs)
model=tf.keras.models.Model(inputs=inputs,outputs=outputs)
model.summary()
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.01),loss=tf.keras.losses.MeanSquaredError())
model.fit(x_train,y_train,epochs=100,batch_size=1,verbose=1)

不幸的是,玩具模型无法正常工作,并且出现以下错误

optimizer_v2.py:1219 _filter_grads ([_的v。名称,grads_and_vars中的v],) ValueError:没有为任何变量提供渐变:['Variable:0']。

所以我试图“自己”计算梯度:

@tf.custom_gradient
def custom_activation(w):
    result  = QuantumCircuit(w)
    
    def grad(dy):
        eps=0.0001
        result1=QuantumCircuit(w)
        result2=QuantumCircuit(w+eps)
        grad=(result2-result1)/eps
        return dy * [grad]

    return result,grad

作为调用量子电路之前的中间步骤。但这都不可行:-(

有人将Qiskit电路插入tensorflow并处理在这种情况下tensorflow的自动微分框架不起作用的事实吗? 非常感谢!!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)