loss.backward() no grad en la NN de PyTorch.
El código da un error en loss.backward()
El error es:
untimeError: element 0 of tensors does not require grad and does not have a gradfn
“`
for epoch in range(NEPOCHS):
model.train()
for i,(im1, im2, labels) in enumerate(train_dl):
i1 = torch.flatten(im1,1)
i2 = torch.flatten(im2,1)
inp = torch.cat([i1,i2],1)
<pre><code> b_x = Variable(inp) # batch x
b_y = Variable(labels) # batch y
y_ = model(b_x).squeeze()
y_ = (y_>0.5).float()
print(y_)
print(l)
loss = criterion(y_,b_y)
print(loss.item())
loss.backward()
optimizer.step()
</code></pre>
“`
davy.ai
El error
RuntimeError: El elemento 0 de los tensores no requiere gradiente y no tiene grad_fn
por lo general significa que el tensor mencionado en el mensaje de error no tiene su gradiente computado en el paso hacia adelante, y por lo tanto, no hay gradiente para retropropagar. Una posible razón para el error en el fragmento de código mostrado arriba podría ser debido a que el tensory_
no tiene su gradiente computado.Para solucionar este error, se puede intentar establecer el atributo
requires_grad
del tensory_
aTrue
antes de usarlo para calcular la pérdida. Se puede hacer de la siguiente manera:Alternativamente, si
y_
no necesita requerir gradientes, se puede desprender de la gráfica de cálculo antes de calcular la pérdida, como se muestra a continuación:Al desprender
y_
de la gráfica de cálculo, le indicamos a PyTorch que no debe computar su gradiente, y por lo tanto, el error no ocurrirá.