Pytorch - RuntimeError: Tentando retroceder o gráfico uma segunda vez, mas os buffers já foram liberados

Eu continuo correndo para este erro:

RuntimeError: Tentando retroceder o gráfico uma segunda vez, mas os buffers já foram liberados. Especifique reter_graph = True ao chamar para trás pela primeira vez.

Pesquisei no fórum Pytorch, mas ainda não consigo descobrir o que fiz de errado na minha função de perda personalizada. Meu modelo é nn.GRU, e aqui está minha função de perda personalizada:

def _loss(outputs, session, items):  # `items` is a dict() contains embedding of all items
    def f(output, target):
        pos = torch.from_numpy(np.array([items[target["click"]]])).float()
        neg = torch.from_numpy(np.array([items[idx] for idx in target["suggest_list"] if idx != target["click"]])).float()
        if USE_CUDA:
            pos, neg = pos.cuda(), neg.cuda()
        pos, neg = Variable(pos), Variable(neg)

        pos = F.cosine_similarity(output, pos)
        if neg.size()[0] == 0:
            return torch.mean(F.logsigmoid(pos))
        neg = F.cosine_similarity(output.expand_as(neg), neg)

        return torch.mean(F.logsigmoid(pos - neg))

    loss = map(f, outputs, session)
return -torch.mean(torch.cat(loss))

Código de treinamento:

    # zero the parameter gradients
    model.zero_grad()

    # forward + backward + optimize
    outputs, hidden = model(inputs, hidden)
    loss = _loss(outputs, session, items)
    acc_loss += loss.data[0]

    loss.backward()
    # Add parameters' gradients to their values, multiplied by learning rate
    for p in model.parameters():
        p.data.add_(-learning_rate, p.grad.data)

questionAnswers(1)

yourAnswerToTheQuestion