{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# LeNet5\n", "\n", "LeNet 诞生于 1994 年,是最早的卷积神经网络之一,并且推动了深度学习领域的发展。自从 1988 年开始,在多次迭代后这个开拓性成果被命名为 LeNet5。LeNet5 的架构的提出是基于如下的观点:图像的特征分布在整张图像上,通过带有可学习参数的卷积,从而有效的减少了参数数量,能够在多个位置上提取相似特征。\n", "\n", "在LeNet5提出的时候,没有 GPU 帮助训练,甚至 CPU 的速度也很慢,因此,LeNet5的规模并不大。其包含七个处理层,每一层都包含可训练参数(权重),当时使用的输入数据是 $32 \\times 32$ 像素的图像。LeNet-5 这个网络虽然很小,但是它包含了深度学习的基本模块:卷积层,池化层,全连接层。它是其他深度学习模型的基础,这里对LeNet5进行深入分析和讲解,通过实例分析,加深对与卷积层和池化层的理解。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "定义网络为:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import torch\n", "from torch import nn\n", "import torch.nn.functional as F\n", "\n", "class LeNet5(nn.Module):\n", " def __init__(self):\n", " super(LeNet5, self).__init__()\n", " # 1-input channel, 6-output channels, 5x5-conv\n", " self.conv1 = nn.Conv2d(1, 6, 5)\n", " # 6-input channel, 16-output channels, 5x5-conv\n", " self.conv2 = nn.Conv2d(6, 16, 5)\n", " # 16x5x5-input, 120-output\n", " self.fc1 = nn.Linear(16 * 5 * 5, 120) \n", " # 120-input, 84-output\n", " self.fc2 = nn.Linear(120, 84)\n", " # 84-input, 10-output\n", " self.fc3 = nn.Linear(84, 10)\n", "\n", " def forward(self, x):\n", " x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))\n", " x = F.max_pool2d(F.relu(self.conv2(x)), (2, 2))\n", " x = torch.flatten(x, 1) # 将结果拉升成1维向量,除了批次的维度\n", " x = F.relu(self.fc1(x))\n", " x = F.relu(self.fc2(x))\n", " x = self.fc3(x)\n", " return x" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "LeNet5(\n", " (conv1): Conv2d(1, 6, kernel_size=(5, 5), stride=(1, 1))\n", " (conv2): Conv2d(6, 16, kernel_size=(5, 5), stride=(1, 1))\n", " (fc1): Linear(in_features=400, out_features=120, bias=True)\n", " (fc2): Linear(in_features=120, out_features=84, bias=True)\n", " (fc3): Linear(in_features=84, out_features=10, bias=True)\n", ")\n" ] } ], "source": [ "net = LeNet5()\n", "print(net)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "tensor([[ 0.0065, 0.1176, -0.0614, -0.1001, -0.0545, 0.0037, -0.0027, -0.0513,\n", " 0.1082, -0.0765]], grad_fn=)\n" ] } ], "source": [ "input = torch.randn(1, 1, 32, 32)\n", "out = net(input)\n", "print(out)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "from torchvision.datasets import mnist\n", "from torch.utils.data import DataLoader\n", "from torchvision import transforms as tfs\n", "from utils import train\n", "\n", "# 使用数据增强\n", "def data_tf(x):\n", " im_aug = tfs.Compose([\n", " tfs.Resize(32),\n", " tfs.ToTensor() #,\n", " #tfs.Normalize([0.5], [0.5])\n", " ])\n", " x = im_aug(x)\n", " return x\n", " \n", "train_set = mnist.MNIST('../../data/mnist', train=True, transform=data_tf, download=True) \n", "train_data = torch.utils.data.DataLoader(train_set, batch_size=64, shuffle=True)\n", "test_set = mnist.MNIST('../../data/mnist', train=False, transform=data_tf, download=True) \n", "test_data = torch.utils.data.DataLoader(test_set, batch_size=128, shuffle=False)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# 显示其中一个数据\n", "import matplotlib.pyplot as plt\n", "plt.imshow(train_set.data[0], cmap='gray')\n", "plt.title('%i' % train_set.targets[0])\n", "plt.colorbar()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "torch.Size([64, 1, 32, 32])\n", "torch.Size([64])\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "tensor([[0., 0., 0., ..., 0., 0., 0.],\n", " [0., 0., 0., ..., 0., 0., 0.],\n", " [0., 0., 0., ..., 0., 0., 0.],\n", " ...,\n", " [0., 0., 0., ..., 0., 0., 0.],\n", " [0., 0., 0., ..., 0., 0., 0.],\n", " [0., 0., 0., ..., 0., 0., 0.]])\n" ] } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "# 显示转化后的图像\n", "for im, label in train_data:\n", " print(im.shape)\n", " print(label.shape)\n", " \n", " img = im[0,0,:,:]\n", " lab = label[0]\n", " plt.imshow(img, cmap='gray')\n", " plt.title('%i' % lab)\n", " plt.colorbar()\n", " plt.show()\n", "\n", " print(im[0,0,:,:])\n", " break" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 0] Train:(L=0.304196, Acc=0.907150), Valid:(L=0.085267, Acc=0.973398), T: 00:00:11\n", "[ 1] Train:(L=0.083967, Acc=0.973997), Valid:(L=0.051110, Acc=0.983188), T: 00:00:11\n", "[ 2] Train:(L=0.059584, Acc=0.981143), Valid:(L=0.055177, Acc=0.981210), T: 00:00:11\n", "[ 3] Train:(L=0.046047, Acc=0.984958), Valid:(L=0.043585, Acc=0.985759), T: 00:00:11\n", "[ 4] Train:(L=0.037409, Acc=0.988973), Valid:(L=0.033133, Acc=0.989814), T: 00:00:11\n", "[ 5] Train:(L=0.033182, Acc=0.989589), Valid:(L=0.043479, Acc=0.985562), T: 00:00:11\n", "[ 6] Train:(L=0.027310, Acc=0.991421), Valid:(L=0.042242, Acc=0.986155), T: 00:00:12\n", "[ 7] Train:(L=0.023416, Acc=0.992337), Valid:(L=0.035876, Acc=0.988825), T: 00:00:11\n", "[ 8] Train:(L=0.019587, Acc=0.993820), Valid:(L=0.040497, Acc=0.987342), T: 00:00:11\n", "[ 9] Train:(L=0.019042, Acc=0.993837), Valid:(L=0.039252, Acc=0.987737), T: 00:00:11\n", "[10] Train:(L=0.014770, Acc=0.995319), Valid:(L=0.036422, Acc=0.988528), T: 00:00:12\n", "[11] Train:(L=0.014417, Acc=0.995536), Valid:(L=0.034385, Acc=0.989616), T: 00:00:11\n", "[12] Train:(L=0.012500, Acc=0.995786), Valid:(L=0.037507, Acc=0.989023), T: 00:00:12\n", "[13] Train:(L=0.012607, Acc=0.995985), Valid:(L=0.038110, Acc=0.988627), T: 00:00:16\n", "[14] Train:(L=0.008935, Acc=0.997102), Valid:(L=0.034667, Acc=0.991001), T: 00:00:18\n", "[15] Train:(L=0.009326, Acc=0.996852), Valid:(L=0.046720, Acc=0.987737), T: 00:00:18\n", "[16] Train:(L=0.010731, Acc=0.996369), Valid:(L=0.034189, Acc=0.991495), T: 00:00:19\n", "[17] Train:(L=0.008745, Acc=0.997035), Valid:(L=0.050465, Acc=0.987243), T: 00:00:18\n", "[18] Train:(L=0.008314, Acc=0.997268), Valid:(L=0.045164, Acc=0.989122), T: 00:00:18\n", "[19] Train:(L=0.007468, Acc=0.997451), Valid:(L=0.050871, Acc=0.987737), T: 00:00:17\n" ] } ], "source": [ "net = LeNet5()\n", "optimizer = torch.optim.Adam(net.parameters(), lr=1e-3)\n", "criterion = nn.CrossEntropyLoss()\n", "\n", "res = train(net, train_data, test_data, 20, optimizer, criterion)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "plt.plot(res[0], label='train')\n", "plt.plot(res[2], label='valid')\n", "plt.xlabel('epoch')\n", "plt.ylabel('Loss')\n", "plt.legend(loc='best')\n", "plt.savefig('fig-res-lenet5-train-validate-loss.pdf')\n", "plt.show()\n", "\n", "plt.plot(res[1], label='train')\n", "plt.plot(res[3], label='valid')\n", "plt.xlabel('epoch')\n", "plt.ylabel('Acc')\n", "plt.legend(loc='best')\n", "plt.savefig('fig-res-lenet5-train-validate-acc.pdf')\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.9" } }, "nbformat": 4, "nbformat_minor": 2 }