Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
deeplearningzerotoall
GitHub Repository: deeplearningzerotoall/PyTorch
Path: blob/master/RNN/3-charseq.py
618 views
1
import torch
2
import torch.optim as optim
3
import numpy as np
4
5
# Random seed to make results deterministic and reproducible
6
torch.manual_seed(0)
7
8
sample = " if you want you"
9
10
# make dictionary
11
char_set = list(set(sample))
12
char_dic = {c: i for i, c in enumerate(char_set)}
13
14
# hyper parameters
15
dic_size = len(char_dic)
16
hidden_size = len(char_dic)
17
learning_rate = 0.1
18
19
# data setting
20
sample_idx = [char_dic[c] for c in sample]
21
x_data = [sample_idx[:-1]]
22
x_one_hot = [np.eye(dic_size)[x] for x in x_data]
23
y_data = [sample_idx[1:]]
24
25
# transform as torch tensor variable
26
X = torch.FloatTensor(x_one_hot)
27
Y = torch.LongTensor(y_data)
28
29
# declare RNN
30
rnn = torch.nn.RNN(dic_size, hidden_size, batch_first=True)
31
32
# loss & optimizer setting
33
criterion = torch.nn.CrossEntropyLoss()
34
optimizer = optim.Adam(rnn.parameters(), learning_rate)
35
36
# start training
37
for i in range(50):
38
optimizer.zero_grad()
39
outputs, _status = rnn(X)
40
loss = criterion(outputs.view(-1, dic_size), Y.view(-1))
41
loss.backward()
42
optimizer.step()
43
44
result = outputs.data.numpy().argmax(axis=2)
45
result_str = ''.join([char_set[c] for c in np.squeeze(result)])
46
print(i, "loss: ", loss.item(), "prediction: ", result, "true Y: ", y_data, "prediction str: ", result_str)
47
48