I’m trying to create my own toy example. I want a single RNN unit that takes a 1d input and has a 1d hidden state which gets updated.

I set the rnn block to be

`rnn_b = nn.RNN(input_size=1, hidden_size=1, num_layers=1, bias=False)`

Then my net is as follows:

```
class MyRNN(nn.Module):
def __init__(self, input_size, hidden_size):
super(MyRNN, self).__init__()
self.input_size = input_size
self.hidden_size = hidden_size
def forward(self, input, hidden):
out, hidden = rnn_b(input, hidden) # update the hidden state
return hidden
```

Next, I do

`rnn = MyRNN(1, 1)`

Now when I try to train, I do

```
criterion = nn.MSELoss()
learning_rate = 0.0005
hidden = torch.tensor([[[1.0]]])
def train(input, target):
rnn.zero_grad()
loss = 0
global hidden
hidden = rnn(input, hidden)
l = criterion(hidden, target)
loss += l
loss.backward()
for p in rnn.parameters():
p.data.add_(-learning_rate, p.grad.data)
return hidden, loss
```

I would like to train it to learn some sequence of numbers, say

```
inputs = [1, 2, 3, 4, ..., 1000]
targets = [2, 3, ..., 1000]
for i in range(0, 999):
hidden, loss = train(torch.tensor([[[inputs[i]]]]), torch.tensor([[[targets[i+1]]]]))
```

This gives me the error: "Trying to backward through the graph a second time, but the buffers have already been freed. " I have seen many threads about this error, but I don’t quite understand it. Besides that, I get the feeling I am not doing things correctly here, so please give me some advice here