Hi, I recently try to employ the device noise model from IBMQ into the variational quantum circuit, but it failed. Here is the toy code.
import pennylane as qml
from pennylane.optimize import GradientDescentOptimizer
from pennylane import numpy as np
import qiskit
import qiskit_aer.noise as noise
def circuit(param, n_qubit):
for j in range(n_qubit):
qml.RZ(param[j, 0], wires=j)
qml.RY(param[j, 1], wires=j)
qml.RZ(param[j, 2], wires=j)
# CNOT
for j in range(0, n_qubit, 2):
if j+1 < n_qubit:
qml.CNOT(wires=[j, j+1])
for j in range(1, n_qubit, 2):
if j+1 < n_qubit:
qml.CNOT(wires=[j, j+1])
return qml.expval(qml.PauliZ(n_qubit-1))
if __name__ == '__main__':
n_qubit = 4
qiskit.IBMQ.load_account()
provider = qiskit.IBMQ.providers(group='open')[0]
backend = provider.get_backend('ibmq_quito')
noise_model = noise.NoiseModel.from_backend(backend)
dev = qml.device('qiskit.aer', wires=n_qubit, noise_model=noise_model)
qnode = qml.QNode(circuit, dev)
opt = GradientDescentOptimizer(0.1)
param = 2*np.pi*np.random.random((n_qubit, 3))
param = opt.step(lambda p: qnode(p, n_qubit), param)
The error information is as follows.
File "/usr/lib/python3.10/contextlib.py", line 79, in inner
return func(*args, **kwds)
File "/home/xxx/.local/lib/python3.10/site-packages/pennylane_qiskit/qiskit_device.py", line 467, in batch_execute
res = self.statistics(circuit)
File "/home/xxx/.local/lib/python3.10/site-packages/pennylane/_qubit_device.py", line 738, in statistics
if obs.return_type is Expectation:
AttributeError: 'RZ' object has no attribute 'return_type'
The version of installed python package is
python=3.10.6
pennylane=0.26.0
qiskit=0.39.2
By the way, I can run the same code several months ago successfully. So I wonder whether there is a new style to implement device noise model in updated pennylane.
Thanks in advance!