I want to calculate gradient descent with the following setup of quantum circuit.
import pennylane as qml
from pennylane import numpy as np
dev = qml.device('default.qubit', wires = ['wire1', 'wire2'], shots = 1000)
@qml.qnode(dev, interface='autograd')
def circuit(params):
qml.RX(params[0], wires = 'wire1') # Rx is applied with the 1st parameter, on the first qubit
qml.RY(params[1], wires = 'wire1') # Ry is applied with the 2nd parameter, on the first qubit
qml.CNOT(wires = ['wire1', 'wire2']) # CNOT is applied on the first and second qubit
#my_circuit(wires = (1,0))
return qml.sample(qml.PauliZ('wire1')), qml.sample(qml.PauliZ('wire2'))
I then implement the gradient descent function,
dcircuit = qml.grad(circuit, argnum=0)
print(dcircuit([0, 0]))
which return the following error
Grad only applies to real scalar-output functions. Try jacobian, elementwise_grad or holomorphic_grad.
After a few trials, I realise that I can run gradient descent only the result is measured in expval(), but not sample()
I don’t know why, I hope someone can explain it to me.
What if I want to use to check the number of shots from sample()
result = circuit(params)
result.shape
how can I correct the code?
Thank you!