PennyLaneAI / comments

0 stars 0 forks source link

blog/2023/04/quantum-nlp-with-the-lambeq-pennylane-integration/ #16

Open utterances-bot opened 9 months ago

utterances-bot commented 9 months ago

Quantum NLP with the lambeq–PennyLane integration | PennyLane Blog

The Quantinuum team gives an introduction to quantum natural language processing (QNLP) and showcases the recently published integration between lambeq and PennyLane.

https://pennylane.ai/blog/2023/04/quantum-nlp-with-the-lambeq-pennylane-integration/

ketayon commented 9 months ago

Hi guys, sorry, but line p_circ.initialise_concrete_params(model.symbols, model.weights) doesn't work, before needs to write symbol_weight_map = dict(zip(model.symbols, model.weights)) and when p_circ.initialise_concrete_params(symbol_weight_map)

Thank you.

dimkart commented 9 months ago

Hello @ketayon and thanks for this, you are right -- not sure how we missed that :)

mohapatra-amrit commented 7 months ago

Hi guys. I have executed these codes properly, print('Final test accuracy: {}'.format(accuracy(test_pair_circuits, test_labels))) is not working. KeyError Traceback (most recent call last)

in () ----> 1 print('Final test accuracy: {}'.format(accuracy(test_pair_circuits, test_labels))) 3 frames /usr/local/lib/python3.10/dist-packages/lambeq/training/pennylane_model.py in get_diagram_output(self, diagrams) 178 circuit_evals = [] 179 for d in diagrams: --> 180 p_circ = self.circuit_map[d] 181 p_circ.initialise_concrete_params(self.symbol_weight_map) 182 circuit_evals.append(p_circ.eval()) KeyError: quantum.circuit.Circuit(inside=(rigid.Layer(quantum.circuit.Ty(), quantum.gates.Ket('Ket(0)', quantum.circuit.Ty(), quantum.circuit.Ty(quantum.circuit.Qudit(2))), quantum.circuit.Ty()), rigid.Layer(quantum.circuit.Ty(), quantum.gates.Rx(man__n_0), quantum.circuit.Ty()), rigid.Layer(quantum.circuit.Ty(), quantum.gates.Rz(man__n_1), quantum.circuit.Ty()), rigid.Layer(quantum.circuit.Ty(), quantum.gates.Rx(man__n_2), quantum.circuit.Ty()), rigid.Layer(quantum.circuit.Ty(quantum.circuit.Qudit(2)), quantum.gates.Ket('Ket(0, 0, 0)', quantum.circuit.Ty(), quantum.circuit.Ty(quantum.circuit.Qudit(2), quantum.circuit.Qudit(2), quantum.circuit.Qudit(2))), quantum.circuit.Ty()), rigid.Layer(quantum.circuit.Ty(quantum.circuit.Qudit(2)), quantum.gates.QuantumGate('H', quantum.circuit.Ty(quantum.circuit.Qudit(2)), quantum.circuit.Ty(quantum.circuit.Qudit(2)), data=[(0.7071067811865476+0j), (0.7071067811865476+0j), (0.7071067811865476+0j), (-0.7071067811865476+0j)]), quantum.circuit.Ty(quantum.circuit.Qudit(2), quantum.circuit.Qudit(2))), rigid.Layer(quantum.circuit.Ty(quantum.circuit.Qudit(2), quantum.circuit.Qudit(2)), quantum.gates.QuantumGate('H', quantum.circuit.Ty(quantum.circuit.Qudit(2)), quantum.circuit.Ty(quantum.circuit.Qudit(2)), data=[(0.7071067811865476+0j), (0.7071067811865476+0j), (0.7071067811865476+0j), (-0.7071067811865476+0j)]), quantum.circuit.Ty(quantum.circuit.Qudit(2))), rigid.Layer(quantum.circuit.Ty(quantum.circuit.Qudit(2), quantum.circuit....
mohapatra-amrit commented 7 months ago

Hi guys. I have executed these codes properly, print('Final test accuracy: {}'.format(accuracy(test_pair_circuits, test_labels))) is not working. I have attached the error below.

KeyError Traceback (most recent call last) in <cell line: 1>() ----> 1 print('Final test accuracy: {}'.format(accuracy(test_pair_circuits, test_labels)))

3 frames /usr/local/lib/python3.10/dist-packages/lambeq/training/pennylane_model.py in get_diagram_output(self, diagrams) 178 circuit_evals = [] 179 for d in diagrams: --> 180 p_circ = self.circuit_map[d] 181 p_circ.initialise_concrete_params(self.symbol_weight_map) 182 circuit_evals.append(p_circ.eval())

KeyError: quantum.circuit.Circuit(inside=(rigid.Layer(quantum.circuit.Ty(), quantum.gates.Ket('Ket(0)', quantum.circuit.Ty(), quantum.circuit.Ty(quantum.circuit.Qudit(2))), quantum.circuit.Ty()), rigid.Layer(quantum.circuit.Ty(), quantum.gates.Rx(mann_0), quantum.circuit.Ty()), rigid.Layer(quantum.circuit.Ty(), quantum.gates.Rz(man__n_1), quantum.circuit.Ty()), rigid.Layer(quantum.circuit.Ty(), quantum.gates.Rx(mann_2), quantum.circuit.Ty()), rigid.Layer(quantum.circuit.Ty(quantum.circuit.Qudit(2)), quantum.gates.Ket('Ket(0, 0, 0)', quantum.circuit.Ty(), quantum.circuit.Ty(quantum.circuit.Qudit(2), quantum.circuit.Qudit(2), quantum.circuit.Qudit(2))), quantum.circuit.Ty()), rigid.Layer(quantum.circuit.Ty(quantum.circuit.Qudit(2)), quantum.gates.QuantumGate('H', quantum.circuit.Ty(quantum.circuit.Qudit(2)), quantum.circuit.Ty(quantum.circuit.Qudit(2)), data=[(0.7071067811865476+0j), (0.7071067811865476+0j), (0.7071067811865476+0j), (-0.7071067811865476+0j)]), quantum.circuit.Ty(quantum.circuit.Qudit(2), quantum.circuit.Qudit(2))), rigid.Layer(quantum.circuit.Ty(quantum.circuit.Qudit(2), quantum.circuit.Qudit(2)), quantum.gates.QuantumGate('H', quantum.circuit.Ty(quantum.circuit.Qudit(2)), quantum.circuit.Ty(quantum.circuit.Qudit(2)), data=[(0.7071067811865476+0j), (0.7071067811865476+0j), (0.7071067811865476+0j), (-0.7071067811865476+0j)]), quantum.circuit.Ty(quantum.circuit.Qudit(2))), rigid.Layer(quantum.circuit.Ty(quantum.circuit.Qudit(2), quantum.circuit....

nikhilkhatri commented 7 months ago

Hi @mohapatra-amrit, When initialising the model using from_diagrams, did you include test_pair_circuits as well? This is necessary to evaluate the test circuits.

mohapatra-amrit commented 7 months ago

Thank you for your response @nikhilkhatri, I have included test_pair_circuits while initialising like this: from lambeq import Dataset

all_pair_circuits = (train_pair_circuits + dev_pair_circuits + test_pair_circuits) a, b = zip(*all_pair_circuits)

initialise our model by passing in the diagrams, so that we have trainable parameters for each token

model = XORSentenceModel.from_diagrams(a + b, probabilities=True, normalize=True) model.initialise_weights() model = model.double()

initialise datasets and optimizers as in PyTorch

train_pair_dataset = Dataset(train_pair_circuits, train_labels, batch_size=BATCH_SIZE)

optimizer = torch.optim.Adam(model.parameters(), lr=0.1)

Still not working.