In my model, I want to first forward some input and calculate and store some immediate results, then use these results in the second forward pass and update the model only with the gradient calculated in the second pass. But I got this error: Specify retain_graph=True when calling backward the first time. My code is below. I change requires_grad before and after the first forward pass to get rid of this error, but this seems like some ugly hacking, is there more elegant way to do this?
   for p in net.parameters():
       p.requires_grad = False
    net(input1)

    for p in net.parameters():
        p.requires_grad = True
    output = net(input2)

    loss = criterion(output,label)
    loss.backward()