mit-han-lab / torchquantum

A PyTorch-based framework for Quantum Classical Simulation, Quantum Machine Learning, Quantum Neural Networks, Parameterized Quantum Circuits with support for easy deployments on real quantum computers.
https://torchquantum.org
MIT License
1.24k stars 184 forks source link

Bug in U2 gate parameter initialization #232

Open yezhuoyang opened 4 months ago

yezhuoyang commented 4 months ago

This is the code I use that has some bugs related with parameter initialization(In dev branch):

import torchquantum as tq
import torchquantum.functional as tqf

qdev = tq.QuantumDevice(n_wires=2, bsz=5, device="cpu", record_op=True)  # use device='cuda' for GPU

# use tqf
tq.u2(qdev, [0], [0.1, 0.2])

# print the current state (dynamic computation graph supported)
print(qdev)

U2 gate is the rotation gate with two parameters U2 gate in qiskit

Running the above example will generate the following error message:

image

The error is caused by some strange manipulation on the dimension of the tensor, I don't understand why we have to use some squeeze and unsqueeze here.

image

It seems that many other gates with more than one parameters have similar issue. We should set the standard of how should user pass the parameters in. And perhaps more code comments in the above part can help developer to understand the convention of tensor dimensions.

Hanrui-Wang commented 4 months ago

This is because we should use tq.u2(qdev, [0],[[0.1, 0.2]]) for the computation with bsz>1

Let's fix it to make sure it runs with [0.1, 0.2] also

tring27 commented 3 months ago

I think it should be ? if params.dim() == 1: params = params.unsqueeze(0).unsqueeze(-1)