
- import numpy as np
-
- inputs = np.array([[1., 1.],
- [1., 1.],
- [2., 2.]]) # 初始化输入序列
- print('inputs is ', inputs)
-
- state_t = np.zeros(2, ) # 初始化存储器
- print('state_t is ', state_t)
-
- w1, w2, w3, w4, w5, w6, w7, w8 = 1., 1., 1., 1., 1., 1., 1., 1.
- U1, U2, U3, U4 = 1., 1., 1., 1.
- print('--------------------------------------')
- for input_t in inputs:
- print('inputs is ', input_t)
- print('state_t is ', state_t)
- in_h1 = np.dot([w1, w3], input_t) + np.dot([U2, U4], state_t)
- in_h2 = np.dot([w2, w4], input_t) + np.dot([U1, U3], state_t)
- state_t = in_h1, in_h2
- output_y1 = np.dot([w5, w7], [in_h1, in_h2])
- output_y2 = np.dot([w6, w8], [in_h1, in_h2])
- print('output_y is ', output_y1, output_y2)
- print('---------------')

- import numpy as np
-
- inputs = np.array([[1., 1.],
- [1., 1.],
- [2., 2.]]) # 初始化输入序列
- print('inputs is ', inputs)
-
- state_t = np.zeros(2, ) # 初始化存储器
- print('state_t is ', state_t)
-
- w1, w2, w3, w4, w5, w6, w7, w8 = 1., 1., 1., 1., 1., 1., 1., 1.
- U1, U2, U3, U4 = 1., 1., 1., 1.
- print('--------------------------------------')
- for input_t in inputs:
- print('inputs is ', input_t)
- print('state_t is ', state_t)
- in_h1 = np.tanh(np.dot([w1, w3], input_t) + np.dot([U2, U4], state_t))
- in_h2 = np.tanh(np.dot([w2, w4], input_t) + np.dot([U1, U3], state_t))
- state_t = in_h1, in_h2
- output_y1 = np.dot([w5, w7], [in_h1, in_h2])
- output_y2 = np.dot([w6, w8], [in_h1, in_h2])
- print('output_y is ', output_y1, output_y2)
- print('---------------')

- import torch
-
- batch_size = 1
- seq_len = 3 # 序列长度
- input_size = 2 # 输入序列维度
- hidden_size = 2 # 隐藏层维度
- output_size = 2 # 输出层维度
-
- # RNNCell
- cell = torch.nn.RNNCell(input_size=input_size, hidden_size=hidden_size)
- # 初始化参数 https://zhuanlan.zhihu.com/p/342012463
- for name, param in cell.named_parameters():
- if name.startswith("weight"):
- torch.nn.init.ones_(param)
- else:
- torch.nn.init.zeros_(param)
- # 线性层
- liner = torch.nn.Linear(hidden_size, output_size)
- liner.weight.data = torch.Tensor([[1, 1], [1, 1]])
- liner.bias.data = torch.Tensor([0.0])
-
- seq = torch.Tensor([[[1, 1]],
- [[1, 1]],
- [[2, 2]]])
- hidden = torch.zeros(batch_size, hidden_size)
- output = torch.zeros(batch_size, output_size)
-
- for idx, input in enumerate(seq):
- print('=' * 20, idx, '=' * 20)
-
- print('Input :', input)
- print('hidden :', hidden)
-
- hidden = cell(input, hidden)
- output = liner(hidden)
- print('output :', output)
- import torch
-
- batch_size = 1
- seq_len = 3
- input_size = 2
- hidden_size = 2
- num_layers = 1
- output_size = 2
-
- cell = torch.nn.RNN(input_size=input_size, hidden_size=hidden_size, num_layers=num_layers)
- for name, param in cell.named_parameters(): # 初始化参数
- if name.startswith("weight"):
- torch.nn.init.ones_(param)
- else:
- torch.nn.init.zeros_(param)
-
- # 线性层
- liner = torch.nn.Linear(hidden_size, output_size)
- liner.weight.data = torch.Tensor([[1, 1], [1, 1]])
- liner.bias.data = torch.Tensor([0.0])
-
- inputs = torch.Tensor([[[1, 1]],
- [[1, 1]],
- [[2, 2]]])
- hidden = torch.zeros(num_layers, batch_size, hidden_size)
- out, hidden = cell(inputs, hidden)
-
- print('Input :', inputs[0])
- print('hidden:', 0, 0)
- print('Output:', liner(out[0]))
- print('--------------------------------------')
- print('Input :', inputs[1])
- print('hidden:', out[0])
- print('Output:', liner(out[1]))
- print('--------------------------------------')
- print('Input :', inputs[2])
- print('hidden:', out[1])
- print('Output:', liner(out[2]))

Anyone Can Learn To Code an LSTM-RNN in Python (Part 1: RNN) - i am trask

翻译Character-Level Language Models 相关内容
The Unreasonable Effectiveness of Recurrent Neural Networks
编码实现该模型



seq2seq的PyTorch实现_哔哩哔哩_bilibili
REF: