Skip to content

Commit 512a037

Browse files
committed
more neurons and less layer work fine
1 parent e50a082 commit 512a037

File tree

1 file changed

+22
-7
lines changed

1 file changed

+22
-7
lines changed

rnn-example/rnn-simple.py

+22-7
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,11 @@
2626
print('Simple RNN model to detect a abba/0110 sequence')
2727

2828
# create a fake dataset of symbols a,b:
29+
rnn_neurons = 10
2930
num_symbols = 2 # a,b
30-
data_size = 1024*8
31+
data_size = 1024*4
3132
seq_len = 4 # abba sequence to be detected only!
32-
num_layers = 4
33+
num_layers = 2
3334
rdata = np.random.randint(0, num_symbols, data_size) # 0=1, 1=b, for example
3435

3536
# turn it into 1-hot encoding:
@@ -52,7 +53,21 @@
5253

5354

5455
# create model:
55-
model = nn.RNN(num_symbols, num_symbols, num_layers) # see: http://pytorch.org/docs/nn.html#rnn
56+
class Net(nn.Module):
57+
def __init__(self):
58+
super(Net, self).__init__()
59+
self.rnn1 = nn.RNN(num_symbols, rnn_neurons, num_layers)
60+
self.classifier1 = nn.Linear(rnn_neurons, num_symbols)
61+
62+
def forward(self, x, h):
63+
y, h = self.rnn1(x,h)
64+
return self.classifier1(y[seq_len-1]), h
65+
66+
def init_hidden(self):
67+
return Variable(torch.zeros(num_layers, 1, rnn_neurons))
68+
69+
70+
model = Net()
5671
criterion = nn.MSELoss()
5772
optimizer = optim.Adam(model.parameters(), lr=0.001)
5873

@@ -81,7 +96,7 @@ def repackage_hidden(h):
8196

8297
def train():
8398
model.train()
84-
hidden = Variable(torch.zeros(num_layers, 1, num_symbols))
99+
hidden = model.init_hidden()
85100

86101
for epoch in range(num_epochs): # loop over the dataset multiple times
87102
running_loss = 0.0
@@ -101,7 +116,7 @@ def train():
101116
model.zero_grad()
102117
output, hidden = model(inputs, hidden)
103118

104-
loss = criterion(output, labels)
119+
loss = criterion(output, labels[seq_len-1])
105120
loss.backward()
106121
optimizer.step()
107122

@@ -121,8 +136,8 @@ def train():
121136

122137
def test():
123138
model.eval()
124-
hidden = Variable(torch.zeros(num_layers, 1, num_symbols))
125-
for i in range(0, 32):
139+
hidden = model.init_hidden()
140+
for i in range(0, 64):
126141
inputs = torch.from_numpy( data[i:i+seq_len,:]).view(seq_len, 1, num_symbols).float()
127142
labels = torch.from_numpy(label[i:i+seq_len,:]).view(seq_len, 1, num_symbols).float()
128143
inputs = Variable(inputs)

0 commit comments

Comments
 (0)