Hello everyone, this is my first topic here, so feel free to tell me if this is the right place for it.

I’m doing an exploratory study on QML applied to high-energy physics. So, I’m building a pipeline that allows me to train multiple circuits with different optimizers, data, etc. - I give it some hyperparameters specifying the training, and It *should* do the rest.

**> The Problem**

When I do the step method on my optimizer / calculate the gradient and apply them, the gradients of **my model weights/parameters are always zero**! Being that the gradient of the model bias is != 0. I even tried to put an insane stepsize of 1e4 on my NesterovMomentum optimizer, but nothing changed.

**> What I think It’s Happening**

If you look at my code, you can see that the circuit is initialized by

self.circuit_ = qml.QNode(globals()[self.circuit_name], self.dev)

What essentially is being done is that the specified circuit (given by the user as a string) is being loaded from another file called “circuits” where the circuit itself is located.

This *self.circuit_* is used on my *circuit* method, where I just pass the current weights and input vector to my parametrized circuit.

`def circuit(self, weights, x): return self.circuit_(weights, self.embedding, self.n_layers, self.n_qubits, x)`

This *circuit* method is itself called by my * classifier* method where I consider the bias of each parameter and

**this is the method my cost function will call to calculate the gradients.**

`def classifier(self, weights, bias, x): return self.circuit(weights, x) + bias`

**My theory is** pennylane can only see the gradients of the vectors specified in the current class and can’t go further - For example, it can’t peek inside the circuit that is defined in another file. This *would* explain why only the bias has a gradient != 0.

Honestly, I have no idea for sure what is happening. If somebody has any idea of the problem, I would be forever thankful!

Have a nice day and thanks in advance!

**> Aditional Information**

A somewhat **simplified version of my code here**

As well as the **circuits file here.**

A picture of the gradient values:

The 0 index represents the weights gradient and index 1, the bias gradient.