{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "YnAtHwhmmGOh", "outputId": "9c2fd82f-fe05-4f0f-cd17-1923e9307495", "slideshow": { "slide_type": "skip" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Collecting git+https://github.com/d2l-ai/d2l-zh@release\n", " Cloning https://github.com/d2l-ai/d2l-zh (to revision release) to /tmp/pip-req-build-rwrn0sr4\n", " Running command git clone -q https://github.com/d2l-ai/d2l-zh /tmp/pip-req-build-rwrn0sr4\n", " Running command git checkout -b release --track origin/release\n", " Switched to a new branch 'release'\n", " Branch 'release' set up to track remote branch 'release' from 'origin'.\n", " Running command git submodule update --init --recursive -q\n", "Requirement already satisfied: jupyter in /usr/local/lib/python3.7/dist-packages (from d2l==2.0.0b0) (1.0.0)\n", "Requirement already satisfied: numpy in /usr/local/lib/python3.7/dist-packages (from d2l==2.0.0b0) (1.19.5)\n", "Requirement already satisfied: matplotlib in /usr/local/lib/python3.7/dist-packages (from d2l==2.0.0b0) (3.2.2)\n", "Requirement already satisfied: requests in /usr/local/lib/python3.7/dist-packages (from d2l==2.0.0b0) (2.23.0)\n", "Requirement already satisfied: pandas in /usr/local/lib/python3.7/dist-packages (from d2l==2.0.0b0) (1.1.5)\n", "Requirement already satisfied: nbconvert in /usr/local/lib/python3.7/dist-packages (from jupyter->d2l==2.0.0b0) (5.6.1)\n", "Requirement already satisfied: ipykernel in /usr/local/lib/python3.7/dist-packages (from jupyter->d2l==2.0.0b0) (4.10.1)\n", "Requirement already satisfied: notebook in /usr/local/lib/python3.7/dist-packages (from jupyter->d2l==2.0.0b0) (5.3.1)\n", "Requirement already satisfied: qtconsole in /usr/local/lib/python3.7/dist-packages (from jupyter->d2l==2.0.0b0) (5.2.2)\n", "Requirement already satisfied: ipywidgets in /usr/local/lib/python3.7/dist-packages (from jupyter->d2l==2.0.0b0) (7.6.5)\n", "Requirement already satisfied: jupyter-console in /usr/local/lib/python3.7/dist-packages (from jupyter->d2l==2.0.0b0) (5.2.0)\n", "Requirement already satisfied: jupyter-client in /usr/local/lib/python3.7/dist-packages (from ipykernel->jupyter->d2l==2.0.0b0) (5.3.5)\n", "Requirement already satisfied: traitlets>=4.1.0 in /usr/local/lib/python3.7/dist-packages (from ipykernel->jupyter->d2l==2.0.0b0) (5.1.1)\n", "Requirement already satisfied: tornado>=4.0 in /usr/local/lib/python3.7/dist-packages (from ipykernel->jupyter->d2l==2.0.0b0) (5.1.1)\n", "Requirement already satisfied: ipython>=4.0.0 in /usr/local/lib/python3.7/dist-packages (from ipykernel->jupyter->d2l==2.0.0b0) (5.5.0)\n", "Requirement already satisfied: simplegeneric>0.8 in /usr/local/lib/python3.7/dist-packages (from ipython>=4.0.0->ipykernel->jupyter->d2l==2.0.0b0) (0.8.1)\n", "Requirement already satisfied: decorator in /usr/local/lib/python3.7/dist-packages (from ipython>=4.0.0->ipykernel->jupyter->d2l==2.0.0b0) (4.4.2)\n", "Requirement already satisfied: pickleshare in /usr/local/lib/python3.7/dist-packages (from ipython>=4.0.0->ipykernel->jupyter->d2l==2.0.0b0) (0.7.5)\n", "Requirement already satisfied: prompt-toolkit<2.0.0,>=1.0.4 in /usr/local/lib/python3.7/dist-packages (from ipython>=4.0.0->ipykernel->jupyter->d2l==2.0.0b0) (1.0.18)\n", "Requirement already satisfied: pexpect in /usr/local/lib/python3.7/dist-packages (from ipython>=4.0.0->ipykernel->jupyter->d2l==2.0.0b0) (4.8.0)\n", "Requirement already satisfied: setuptools>=18.5 in /usr/local/lib/python3.7/dist-packages (from ipython>=4.0.0->ipykernel->jupyter->d2l==2.0.0b0) (57.4.0)\n", "Requirement already satisfied: pygments in /usr/local/lib/python3.7/dist-packages (from ipython>=4.0.0->ipykernel->jupyter->d2l==2.0.0b0) (2.6.1)\n", "Requirement already satisfied: six>=1.9.0 in /usr/local/lib/python3.7/dist-packages (from prompt-toolkit<2.0.0,>=1.0.4->ipython>=4.0.0->ipykernel->jupyter->d2l==2.0.0b0) (1.15.0)\n", "Requirement already satisfied: wcwidth in /usr/local/lib/python3.7/dist-packages (from prompt-toolkit<2.0.0,>=1.0.4->ipython>=4.0.0->ipykernel->jupyter->d2l==2.0.0b0) (0.2.5)\n", "Requirement already satisfied: widgetsnbextension~=3.5.0 in /usr/local/lib/python3.7/dist-packages (from ipywidgets->jupyter->d2l==2.0.0b0) (3.5.2)\n", "Requirement already satisfied: jupyterlab-widgets>=1.0.0 in /usr/local/lib/python3.7/dist-packages (from ipywidgets->jupyter->d2l==2.0.0b0) (1.0.2)\n", "Requirement already satisfied: nbformat>=4.2.0 in /usr/local/lib/python3.7/dist-packages (from ipywidgets->jupyter->d2l==2.0.0b0) (5.1.3)\n", "Requirement already satisfied: ipython-genutils~=0.2.0 in /usr/local/lib/python3.7/dist-packages (from ipywidgets->jupyter->d2l==2.0.0b0) (0.2.0)\n", "Requirement already satisfied: jsonschema!=2.5.0,>=2.4 in /usr/local/lib/python3.7/dist-packages (from nbformat>=4.2.0->ipywidgets->jupyter->d2l==2.0.0b0) (4.3.3)\n", "Requirement already satisfied: jupyter-core in /usr/local/lib/python3.7/dist-packages (from nbformat>=4.2.0->ipywidgets->jupyter->d2l==2.0.0b0) (4.9.1)\n", "Requirement already satisfied: pyrsistent!=0.17.0,!=0.17.1,!=0.17.2,>=0.14.0 in /usr/local/lib/python3.7/dist-packages (from jsonschema!=2.5.0,>=2.4->nbformat>=4.2.0->ipywidgets->jupyter->d2l==2.0.0b0) (0.18.0)\n", "Requirement already satisfied: importlib-resources>=1.4.0 in /usr/local/lib/python3.7/dist-packages (from jsonschema!=2.5.0,>=2.4->nbformat>=4.2.0->ipywidgets->jupyter->d2l==2.0.0b0) (5.4.0)\n", "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.7/dist-packages (from jsonschema!=2.5.0,>=2.4->nbformat>=4.2.0->ipywidgets->jupyter->d2l==2.0.0b0) (3.10.0.2)\n", "Requirement already satisfied: importlib-metadata in /usr/local/lib/python3.7/dist-packages (from jsonschema!=2.5.0,>=2.4->nbformat>=4.2.0->ipywidgets->jupyter->d2l==2.0.0b0) (4.10.0)\n", "Requirement already satisfied: attrs>=17.4.0 in /usr/local/lib/python3.7/dist-packages (from jsonschema!=2.5.0,>=2.4->nbformat>=4.2.0->ipywidgets->jupyter->d2l==2.0.0b0) (21.4.0)\n", "Requirement already satisfied: zipp>=3.1.0 in /usr/local/lib/python3.7/dist-packages (from importlib-resources>=1.4.0->jsonschema!=2.5.0,>=2.4->nbformat>=4.2.0->ipywidgets->jupyter->d2l==2.0.0b0) (3.7.0)\n", "Requirement already satisfied: terminado>=0.8.1 in /usr/local/lib/python3.7/dist-packages (from notebook->jupyter->d2l==2.0.0b0) (0.12.1)\n", "Requirement already satisfied: Send2Trash in /usr/local/lib/python3.7/dist-packages (from notebook->jupyter->d2l==2.0.0b0) (1.8.0)\n", "Requirement already satisfied: jinja2 in /usr/local/lib/python3.7/dist-packages (from notebook->jupyter->d2l==2.0.0b0) (2.11.3)\n", "Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.7/dist-packages (from jupyter-client->ipykernel->jupyter->d2l==2.0.0b0) (2.8.2)\n", "Requirement already satisfied: pyzmq>=13 in /usr/local/lib/python3.7/dist-packages (from jupyter-client->ipykernel->jupyter->d2l==2.0.0b0) (22.3.0)\n", "Requirement already satisfied: ptyprocess in /usr/local/lib/python3.7/dist-packages (from terminado>=0.8.1->notebook->jupyter->d2l==2.0.0b0) (0.7.0)\n", "Requirement already satisfied: MarkupSafe>=0.23 in /usr/local/lib/python3.7/dist-packages (from jinja2->notebook->jupyter->d2l==2.0.0b0) (2.0.1)\n", "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->d2l==2.0.0b0) (1.3.2)\n", "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->d2l==2.0.0b0) (3.0.6)\n", "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.7/dist-packages (from matplotlib->d2l==2.0.0b0) (0.11.0)\n", "Requirement already satisfied: defusedxml in /usr/local/lib/python3.7/dist-packages (from nbconvert->jupyter->d2l==2.0.0b0) (0.7.1)\n", "Requirement already satisfied: entrypoints>=0.2.2 in /usr/local/lib/python3.7/dist-packages (from nbconvert->jupyter->d2l==2.0.0b0) (0.3)\n", "Requirement already satisfied: pandocfilters>=1.4.1 in /usr/local/lib/python3.7/dist-packages (from nbconvert->jupyter->d2l==2.0.0b0) (1.5.0)\n", "Requirement already satisfied: testpath in /usr/local/lib/python3.7/dist-packages (from nbconvert->jupyter->d2l==2.0.0b0) (0.5.0)\n", "Requirement already satisfied: mistune<2,>=0.8.1 in /usr/local/lib/python3.7/dist-packages (from nbconvert->jupyter->d2l==2.0.0b0) (0.8.4)\n", "Requirement already satisfied: bleach in /usr/local/lib/python3.7/dist-packages (from nbconvert->jupyter->d2l==2.0.0b0) (4.1.0)\n", "Requirement already satisfied: packaging in /usr/local/lib/python3.7/dist-packages (from bleach->nbconvert->jupyter->d2l==2.0.0b0) (21.3)\n", "Requirement already satisfied: webencodings in /usr/local/lib/python3.7/dist-packages (from bleach->nbconvert->jupyter->d2l==2.0.0b0) (0.5.1)\n", "Requirement already satisfied: pytz>=2017.2 in /usr/local/lib/python3.7/dist-packages (from pandas->d2l==2.0.0b0) (2018.9)\n", "Requirement already satisfied: qtpy in /usr/local/lib/python3.7/dist-packages (from qtconsole->jupyter->d2l==2.0.0b0) (2.0.0)\n", "Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from requests->d2l==2.0.0b0) (3.0.4)\n", "Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.7/dist-packages (from requests->d2l==2.0.0b0) (1.24.3)\n", "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/dist-packages (from requests->d2l==2.0.0b0) (2021.10.8)\n", "Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.7/dist-packages (from requests->d2l==2.0.0b0) (2.10)\n", "Building wheels for collected packages: d2l\n", " Building wheel for d2l (setup.py) ... \u001b[?25l\u001b[?25hdone\n", " Created wheel for d2l: filename=d2l-2.0.0b0-py3-none-any.whl size=80071 sha256=52bdc5edc13a6233bf007431cd81aac7f01ddffc0b2e0a61eeae9f9a17c5c9e1\n", " Stored in directory: /tmp/pip-ephem-wheel-cache-9zyqtm5h/wheels/73/f4/42/d2b85ca46d85a241d6aa57c1c24027de2d2258202bb67945f9\n", "Successfully built d2l\n", "Installing collected packages: d2l\n", "Successfully installed d2l-2.0.0b0\n" ] } ], "source": [ "!pip install git+https://github.com/d2l-ai/d2l-zh@release # installing d2l\n" ] }, { "cell_type": "markdown", "metadata": { "id": "3J6COHAcmGOj", "origin_pos": 0, "slideshow": { "slide_type": "slide" } }, "source": [ "# 网络中的网络(NiN)\n", "\n", "## (**NiN块结构**)\n", "\n", "![对比 VGG 和 NiN 及它们的块之间主要架构差异。](http://d2l.ai/_images/nin.svg)\n", ":width:`600px`\n", ":label:`fig_nin`\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "id": "icjYVLrqmGOk", "origin_pos": 2, "slideshow": { "slide_type": "slide" }, "tab": [ "pytorch" ] }, "outputs": [], "source": [ "import torch\n", "from torch import nn\n", "from d2l import torch as d2l\n", "\n", "#定义NiN块\n", "def nin_block(in_channels, out_channels, kernel_size, strides, padding):\n", " return nn.Sequential(\n", " nn.Conv2d(in_channels, out_channels, kernel_size, strides, padding),\n", " nn.ReLU(),\n", " nn.Conv2d(out_channels, out_channels, kernel_size=1), nn.ReLU(),\n", " nn.Conv2d(out_channels, out_channels, kernel_size=1), nn.ReLU())" ] }, { "cell_type": "markdown", "metadata": { "id": "m76Gv4E2mGOl", "origin_pos": 4, "slideshow": { "slide_type": "slide" } }, "source": [ "## [**NiN模型**]" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "id": "ZM95zdrnmGOm", "origin_pos": 6, "slideshow": { "slide_type": "-" }, "tab": [ "pytorch" ] }, "outputs": [], "source": [ "net = nn.Sequential(\n", " nin_block(1, 96, kernel_size=11, strides=4, padding=0),\n", " nn.MaxPool2d(3, stride=2),\n", " nin_block(96, 256, kernel_size=5, strides=1, padding=2),\n", " nn.MaxPool2d(3, stride=2),\n", " nin_block(256, 384, kernel_size=3, strides=1, padding=1),\n", " nn.MaxPool2d(3, stride=2),\n", " nn.Dropout(0.5),\n", " # 标签类别数是10\n", " nin_block(384, 10, kernel_size=3, strides=1, padding=1),\n", " nn.AdaptiveAvgPool2d((1, 1)), #全局平均池化,高宽都变成1\n", " # 将四维的输出转成二维的输出,其形状为(批量大小,10)\n", " nn.Flatten())" ] }, { "cell_type": "markdown", "metadata": { "id": "qpeUzjQ5mGOn", "origin_pos": 8, "slideshow": { "slide_type": "slide" } }, "source": [ "**demo测试,查看每个块的输出情况**\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "jOu7BZpsmGOo", "origin_pos": 10, "outputId": "80275b87-d88b-4d17-fbc1-90bf1dc46241", "slideshow": { "slide_type": "-" }, "tab": [ "pytorch" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Sequential output shape:\t torch.Size([1, 96, 54, 54])\n", "MaxPool2d output shape:\t torch.Size([1, 96, 26, 26])\n", "Sequential output shape:\t torch.Size([1, 256, 26, 26])\n", "MaxPool2d output shape:\t torch.Size([1, 256, 12, 12])\n", "Sequential output shape:\t torch.Size([1, 384, 12, 12])\n", "MaxPool2d output shape:\t torch.Size([1, 384, 5, 5])\n", "Dropout output shape:\t torch.Size([1, 384, 5, 5])\n", "Sequential output shape:\t torch.Size([1, 10, 5, 5])\n", "AdaptiveAvgPool2d output shape:\t torch.Size([1, 10, 1, 1])\n", "Flatten output shape:\t torch.Size([1, 10])\n" ] } ], "source": [ "X = torch.rand(size=(1, 1, 224, 224))\n", "for layer in net:\n", " X = layer(X)\n", " print(layer.__class__.__name__,'output shape:\\t', X.shape)" ] }, { "cell_type": "markdown", "metadata": { "id": "dsBcacGnmGOq", "origin_pos": 12, "slideshow": { "slide_type": "slide" } }, "source": [ "**训练模型**" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 261 }, "id": "ERZoQ6v-mGOr", "origin_pos": 13, "outputId": "6b85b5ef-f4f3-4195-bb5c-0ad95998bfd0", "slideshow": { "slide_type": "-" }, "tab": [ "pytorch" ] }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "lr, num_epochs, batch_size = 0.1, 10, 128\n", "train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size, resize=224)\n", "d2l.train_ch6(net, train_iter, test_iter, num_epochs, lr, d2l.try_gpu())" ] } ], "metadata": { "accelerator": "GPU", "celltoolbar": "幻灯片", "colab": { "name": "nin.ipynb", "provenance": [] }, "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.8.3" } }, "nbformat": 4, "nbformat_minor": 1 }