<jupyter_start><jupyter_text>RNN RNN专门用于解决序列式输入的输入数据，如天气预报的天气特征需要之前多天的数据，而这些数据之间会有一定的依赖关系。**RNN的本质是一个线性层**，![RNN1.png](https://i.loli.net/2021/02/28/OxjRmAIDVSq5g1t.png)其中RNN Cell为各数据共享（一条序列），所以权重数量实际较少，另外，输入数据 $\mathbf{X_t} \in \mathbf{R}^{n \times d}$，隐藏数据 $\mathbf{H_t} \in \mathbf{R}^{n \times h}$，其中 n 为数据数量，或者理解为前后有关联的数据个数，而 d 和 h 分别为输入数据的特征维度以及隐藏数据的“层数”。\begin{equation}\boldsymbol{H}_{t}=\phi\left(\boldsymbol{X}_{t} \boldsymbol{W}_{x h}+\boldsymbol{H}_{t-1} \boldsymbol{W}_{h h}+\boldsymbol{b}_{h}\right)\tag{a}\label{eq:1}\end{equation}式$(a)$即包含了之前的状态变量对当前状态的影响。为了方便计算，我们可以将$\boldsymbol{X_t}$和$\boldsymbol{H_{t-1}}$连结之后与$\boldsymbol{W_{xh}}$和$\boldsymbol{W_{hh}}$连结之后的矩阵相乘，得到与式 (\ref{eq:1})相同的结果。换言之，在 RNN 的单元内，有多个权重矩阵，分别管理隐藏层、输入层和输出层，对于文字模型来说，最方便的构造输入向量的方式为独热编码，但是有一些坏处如会占用大量内存。<jupyter_code>import torch

#initialize the parameters of dimensions
batch_size = 16
seq_len = 3
input_size = 4
hidden_size = 2

cell = torch.nn.RNNCell(input_szie=input_size, hidden_size=hidden_size)

#(seq_len, batch_size, input_size)
dataset = torch.randn(seq_len, batch_size, input_size)
hidden = torch.randn(batch_size, input_size)

for idx, data in enumerate(dataset):
    hidden = cell(input, hidden)<jupyter_output><empty_output><jupyter_text>此Cell仅实现一个单元计算，要获得各序列的计算结果需要循环调用。<jupyter_code>batch_size = 16
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)
out, hidden = cell(inputs, hidden)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1544256120527307, 'fraction_numerical': 0.016321406151914627, 'mean_word_length': 8.160919540229886, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 9, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '2', 'dir': 'jupyter-structured-clean-dedup', 'id': '165652', 'license': 'MIT', 'n_tokens_mistral': 831, 'n_tokens_neox': 885, 'n_words': 82, 'path': 'RNN.ipynb', 'repo_name': 'zppppppx/pytorch', 'size': '1593'}