{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## 7.1 从语言模型到循环神经网络" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "H_t的形状:torch.Size([2, 4]),O_t的形状:torch.Size([2, 2])\n" ] } ], "source": [ "import torch\n", "import torch.nn.functional as F\n", "\n", "##计算Ht,假设激活函数为ReLU。\n", "X, W_xh = torch.normal( 0, 1,(2, 3)), torch.normal( 0, 1,(3, 4))\n", "H, W_hh = torch.normal( 0, 1,(2, 4)), torch.normal( 0, 1,(4, 4))\n", "B_h= torch.normal( 0, 1,(1, 4))\n", "H1=torch.matmul(X, W_xh) + torch.matmul(H, W_hh)+B_h\n", "H_t=F.relu(H1)\n", "\n", "##计算O_t,输出激活函数为softmax\n", "W_hm=torch.normal( 0, 1,(4, 2))\n", "B_m= torch.normal( 0, 1,(1, 2))\n", "O=torch.matmul(H_t, W_hm) +B_m\n", "O_t=F.softmax(O,dim=-1)\n", "print(\"H_t的形状:{},O_t的形状:{}\".format(H_t.shape,O_t.shape))\n" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "------------------------------矩阵H_t------------------------------\n", "tensor([[0.0000, 0.0000, 0.0825, 1.8822],\n", " [0.2298, 0.0000, 0.0000, 0.0000]])\n", "------------------------------矩阵H02------------------------------\n", "tensor([[0.0000, 0.0000, 0.0825, 1.8822],\n", " [0.2298, 0.0000, 0.0000, 0.0000]])\n" ] } ], "source": [ "H01=torch.matmul(torch.cat((X, H), 1), torch.cat((W_xh, W_hh), 0)) + B_h\n", "H02=F.relu(H01)\n", "###查看矩阵H_t和H02\n", "print(\"-\"*30+\"矩阵H_t\"+\"-\"*30)\n", "print(H_t)\n", "print(\"-\"*30+\"矩阵H02\"+\"-\"*30)\n", "print(H02)\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 7.2前向传播与随时间反向传播" ] }, { "attachments": { "image.png": { "image/png": "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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "状态值_0: [0.53704957 0.46211716]\n", "输出值_0: [1.56128388]\n", "状态值_1: [0.85973818 0.88366641]\n", "输出值_1: [2.72707101]\n" ] } ], "source": [ "import numpy as np\n", "\n", "X = [1,2]\n", "state = [0.0, 0.0]\n", "w_cell_state = np.asarray([[0.1, 0.2], [0.3, 0.4],[0.5, 0.6]])\n", "b_cell = np.asarray([0.1, -0.1])\n", "w_output = np.asarray([[1.0], [2.0]])\n", "b_output = 0.1\n", "\n", "for i in range(len(X)):\n", " state=np.append(state,X[i])\n", " before_activation = np.dot(state, w_cell_state) + b_cell\n", " state = np.tanh(before_activation)\n", " final_output = np.dot(state, w_output) + b_output\n", " print(\"状态值_%i: \"%i, state)\n", " print(\"输出值_%i: \"%i, final_output)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 7.4 循环神经网络的Pytorch实现\n", "前面我们介绍了循环神经网络的基本架构及其LSTM、GRU等变种。针对这些循环神经网络,PyTorch均提供了相应的API,如单元版的有nn.RNNCell、nn.LSTMCell、nn.GRUCell等,封装版的有nn.RNN、nn.LSTM、nn.GRU。单元版与封装版的最大区别在于输入,前者的输入是时间步或序列的一个元素,后者的输入是一个时间步序列。利用这些API可以极大提高我们的开发效率。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 7.4.1 使用PyTorch实现RNN\n", "\tPyTorch为RNN提供了两个版本的循环神经网络接口,单元版的输入是每个时间步或循环神经网络的一个循环,而封装版的输入是一个序列。下面我们从简单的封装版torch.nn.RNN开始,其一般格式为:\n", "torch.nn.RNN( args, * kwargs)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import torch\n", "import torch.nn as nn\n", "import torch.nn.functional as F\n", "import torch.optim as optim\n", "from torchvision import datasets, transforms" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "为使大家对循环神经网络有个直观理解,下面先用PyTorch实现简单循环神经网络,然后验证其关键要素。\n", "\t首先建立一个简单循环神经网络,输入维度为10,隐含状态维度为20,单向两层网络。" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "rnn = nn.RNN(input_size=10, hidden_size=20,num_layers= 2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "因输入节点与隐含层节点是全连接,根据输入维度、隐含层维度,可以推算出相关权重参数的维度,w_ih应该是20x10,w_hh是20x20, b_ih和b_hh都是hidden_size。下面我们通过查询weight_ih_l0、weight_hh_l0等进行验证。" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "wih形状torch.Size([20, 10]),whh形状torch.Size([20, 20]),bih形状torch.Size([20])\n", "wih形状torch.Size([20, 20]),whh形状torch.Size([20, 20]),bih形状torch.Size([20])\n" ] } ], "source": [ "#第一层相关权重参数形状\n", "print(\"wih形状{},whh形状{},bih形状{}\".format(rnn.weight_ih_l0.shape,rnn.weight_hh_l0.shape,rnn.bias_hh_l0.shape))\n", "#wih形状torch.Size([20, 10]),whh形状torch.Size([20, 20]),bih形状#torch.Size([20])\n", "#第二层相关权重参数形状\n", "print(\"wih形状{},whh形状{},bih形状{}\".format(rnn.weight_ih_l1.shape,rnn.weight_hh_l1.shape,rnn.bias_hh_l1.shape))\n", "# wih形状torch.Size([20, 20]),whh形状torch.Size([20, 20]),bih形状#torch.Size([20])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "RNN已搭建好,接下来将输入(x_t 、h_0)传入网络,根据网络配置及网络要求,生成输入数据。输入特征长度为100,批量大小为32,特征维度为10的张量。按网络要求,隐含状态的形状为(2,32,20)。" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "#生成输入数据\n", "input=torch.randn(100,32,10)\n", "h_0=torch.randn(2,32,20)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "将输入数据传入RNN,将得到输出及更新后的隐含状态值。根据以上规则,输出output的形状应该是(100,32,20),隐含状态的输出的形状应该与输入的形状一致。" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "torch.Size([100, 32, 20]) torch.Size([2, 32, 20])\n" ] } ], "source": [ "output,h_n=rnn(input,h_0)\n", "print(output.shape,h_n.shape)\n", "#torch.Size([100, 32, 20]) torch.Size([2, 32, 20])" ] }, { "attachments": { "image.png": { "image/png": "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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "结果与我们设想的完全一致。\n", "\tRNNCell的输入的形状是(batch,input_size),没有序列长度,这是因为隐含状态的输入只有单层,故其形状为(batch,hdden_size)。网络的输出只有隐含状态输出,其形状与输入一致,即(batch,hdden_size)。\n", "\t接下来我们利用PyTorch实现RNN,RNN由全连接层来构建,每一步输出预测和隐含状态,先前的隐含状态输入至下一时刻,具体如图7-12所示。\n", "\n", "