第12讲 循环神经网络基础篇(部分笔记)
B站 刘二大人 传送门:《PyTorch深度学习实践》完结合集
仅把RNN代码复制了过来
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23################################################################################ # 刘二大人 RNN基础test1 # 1.RNNCELL ################################################################################ import torch batch_size = 1 seq_len = 3 input_size = 4 hidden_size = 2 cell = torch.nn.RNNCell(input_size=input_size, hidden_size=hidden_size) dataset = torch.randn(seq_len, batch_size, input_size) hidden = torch.zeros(batch_size, hidden_size) for idx, input in enumerate(dataset): print('='*20, idx, '='*20) print('Input size:', input.shape) hidden = cell(input, hidden) # 当前时刻的输入及hidden # input of shape (batch_size, input_size) # hidden of shape (batch_size, hidden_size) 输入和输出隐层h维度相同 print('outputs size:', hidden.shape) print(hidden)
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19################################################################################ # 刘二大人@RNN基础test1 # 1.RNNCELL # 2.RNN ################################################################################ import torch batch_size = 1 seq_len = 3 input_size = 4 hidden_size = 2 num_layers = 1 cell = torch.nn.RNN(input_size=input_size, hidden_size=hidden_size, num_layers=num_layers) inputs = torch.randn(seq_len, batch_size, input_size) hidden = torch.zeros(num_layers, batch_size, hidden_size) out, hidden = cell(inputs, hidden) print('output size:', out.shape) print('output:', out) print('hidden size:', hidden.shape) print('hidden:', hidden)
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49################################################################################ # 刘二大人@RNN基础test1 # 1.RNNCELL # 2.RNN # 3.Use RNNcell ################################################################################ import torch input_size = 4 hidden_size = 4 batch_size = 1 idx2char = ['e', 'h', 'l', 'o'] x_data = [1, 0, 2, 2, 3] y_data = [3, 1, 2, 3, 2] one_hot_lookup = [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]] x_one_hot = [one_hot_lookup[x] for x in x_data] inputs = torch.Tensor(x_one_hot).view(-1, batch_size, input_size) labels = torch.LongTensor(y_data).view(-1, 1) class Model(torch.nn.Module): def __init__(self, input_size, hidden_size, batch_size): super(Model, self).__init__() self.batch_size = batch_size self.input_size = input_size self.hidden_size = hidden_size self.rnncell = torch.nn.RNNCell(input_size=self.input_size, hidden_size=self.hidden_size) def forward(self, input, hidden): hidden = self.rnncell(input, hidden) return hidden def init_hidden(self): return torch.zeros(self.batch_size, self.hidden_size) net = Model (input_size, hidden_size, batch_size) criterion = torch.nn.CrossEntropyLoss() optimizer = torch.optim.Adam(net.parameters(), lr=0.1) for epoch in range (15): loss = 0 optimizer.zero_grad() hidden = net.init_hidden() print('Predicted string:', end='') for input, label in zip (inputs, labels): hidden = net(input, hidden) loss += criterion(hidden, label) _, idx = hidden.max(dim=-1) print(idx2char[idx.item()], end='') # print(idx) loss.backward() optimizer.step() print(',Epoch [%d/15] loss=%.4f' % (epoch+1, loss.item()))
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52################################################################################ # 刘二大人@RNN基础test1 # 1.RNN CELL # 2.RNN # 3.Using RNN Cell # 4.Using RNN Module ################################################################################ import torch input_size = 4 hidden_size = 4 batch_size = 1 seq_len = 5 num_layers = 1 idx2char = ['e', 'h', 'l', 'o'] x_data = [1, 0, 2, 2, 3] y_data = [3, 1, 2, 3, 2] one_hot_lookup = [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]] x_one_hot = [one_hot_lookup[x] for x in x_data] inputs = torch.Tensor(x_one_hot).view(seq_len, batch_size, input_size) labels = torch.LongTensor(y_data) class Model(torch.nn.Module): def __init__(self, input_size, hidden_size, batch_size, num_layers): super(Model, self).__init__() self.num_layers = num_layers self.batch_size = batch_size self.input_size = input_size self.hidden_size = hidden_size self.rnn = torch.nn.RNN(input_size=self.input_size, hidden_size=self.hidden_size, num_layers=num_layers) def forward(self, input): hidden = torch.zeros(self.num_layers, self.batch_size, self.hidden_size) out, _ = self.rnn(input, hidden) return out.view(-1, self.hidden_size) # def init_hidden(self): # return torch.zeros(self.batch_size, self.hidden_size) net = Model (input_size, hidden_size, batch_size, num_layers) criterion = torch.nn.CrossEntropyLoss() optimizer = torch.optim.Adam(net.parameters(), lr=0.1) for epoch in range(15): optimizer.zero_grad() outputs = net(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() _, idx = outputs.max(dim=1) idx = idx.data.numpy() print('Predicted:', ''.join([idx2char[x] for x in idx]), end='') print(',Epoch [%d/15] loss = %.3f' % (epoch + 1, loss.item()))
最后
以上就是儒雅草莓最近收集整理的关于Pytorch十二讲 RNN基础(部分笔记)的全部内容,更多相关Pytorch十二讲内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复