Hello everyone, I am trying to implement the following loss function:
I have to perform a SGD to parameterize qθ(x), and q̃θ(x) is the parametrized part of the function.
So far I’ve come up with something like this:
def objective(p, output): x,y = p a = minA b = minB r = 0.1 XA = 1/2 -1/2 * torch.tanh(100*((x - a)**2 + (y - a)**2 - (r + 0.02)**2)) XB = 1/2 -1/2 * torch.tanh(100*((x - b)**2 + (y - b)**2 - (r + 0.02)**2)) q = (1-XA)*((1-XB)* output - (XB)) print("In obective function, q is", q) output_grad, = torch.autograd.grad(q, (x,y), retain_graph=True, create_graph=True) q = output_grad**2 return q
This problem can be viewed as an unsupervised minimization problem. I am using as training data points that I’ve indepentely sampled from a distribution.
The training is:
for e in range(epochs) : for configuration in total: # Training pass optimizer.zero_grad() #output is q~ output = model(configuration) #loss is the objective function we defined loss = objective(configuration, output) loss.backward() optimizer.step()
In particular, I get the error: “RuntimeError: One of the differentiated Tensors does not require grad”.
Thank you to anyone who will help me.