If you do input = proj then backpropagation will flow back through time via the hidden state AND through the previous step’s output. This might be a good thing, but if you don’t want it, then you need one of the following fixes.

input = Variable(proj.data) # no need for requires_grad
input = proj.detach()