Skip to content

Commit e50a082

Browse files
committed
working model
needed more layers, or more neurons…
1 parent 5b72b21 commit e50a082

File tree

1 file changed

+10
-7
lines changed

1 file changed

+10
-7
lines changed

rnn-example/rnn-simple.py

+10-7
Original file line numberDiff line numberDiff line change
@@ -27,22 +27,22 @@
2727

2828
# create a fake dataset of symbols a,b:
2929
num_symbols = 2 # a,b
30-
data_size = 256
30+
data_size = 1024*8
3131
seq_len = 4 # abba sequence to be detected only!
32-
num_layers = 3
32+
num_layers = 4
3333
rdata = np.random.randint(0, num_symbols, data_size) # 0=1, 1=b, for example
3434

3535
# turn it into 1-hot encoding:
3636
data = np.empty([data_size, num_symbols])
3737
for i in range(0, data_size):
38-
data[i,:] = ( rdata[i], not rdata[i] )
38+
data[i,:] = ( rdata[i], not rdata[i] ) # only works for 2 symbols for now!
3939

4040
print('dataset is:', data, 'with size:', data.shape)
4141

4242
# create labels:
4343
label = np.zeros([data_size, num_symbols])
4444
count = 0
45-
for i in range(3, data_size):
45+
for i in range(seq_len, data_size):
4646
label[i,:] = (1,0)
4747
if (rdata[i-3]==0 and rdata[i-2]==1 and rdata[i-1]==1 and rdata[i]==0):
4848
label[i,:] = (0,1)
@@ -54,7 +54,7 @@
5454
# create model:
5555
model = nn.RNN(num_symbols, num_symbols, num_layers) # see: http://pytorch.org/docs/nn.html#rnn
5656
criterion = nn.MSELoss()
57-
optimizer = optim.Adam(model.parameters(), lr=0.005)
57+
optimizer = optim.Adam(model.parameters(), lr=0.001)
5858

5959
# test model, see: http://pytorch.org/docs/nn.html#rnn
6060
# inp = torch.zeros(seq_len, 1, num_symbols)
@@ -108,6 +108,8 @@ def train():
108108
# print info / statistics:
109109
# print('in:', data[i:i+seq_len,0], 'label:', label[i:i+seq_len,1], 'out:', output.data.numpy())
110110
# print(inputs, labels)
111+
# input()
112+
111113
running_loss += loss.data[0]
112114
num_ave = 64
113115
if i % num_ave == 0: # print every ave mini-batches
@@ -120,10 +122,11 @@ def train():
120122
def test():
121123
model.eval()
122124
hidden = Variable(torch.zeros(num_layers, 1, num_symbols))
123-
for i in range(0, data_size-seq_len, seq_len):
125+
for i in range(0, 32):
124126
inputs = torch.from_numpy( data[i:i+seq_len,:]).view(seq_len, 1, num_symbols).float()
125127
labels = torch.from_numpy(label[i:i+seq_len,:]).view(seq_len, 1, num_symbols).float()
126-
inputs = Variable(inputs)
128+
inputs = Variable(inputs)
129+
hidden = repackage_hidden(hidden)
127130
output, hidden = model(inputs, hidden)
128131
print('in:', data[i:i+seq_len,0], 'label:', label[i:i+seq_len,1], 'out:', output.data.numpy())
129132

0 commit comments

Comments
 (0)