{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "Medical AI Course Materials : 04_Introduction_to_Chainer.ipynb", "version": "0.3.2", "provenance": [], "collapsed_sections": [] }, "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.2" } }, "cells": [ { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "n0_KFOv4Mq3N" }, "source": [ "# Deep Learningフレームワークの基礎\n", "\n", "ChainerはDeep Learningフレームワークの一つで,現在様々なDeep Learningフレームワーク(TensorFlow, PyTorch, etc.)でも採用され主要なニューラルネットワークの記法となっている**Define-by-Run**というアイデアを汎用的なDeep Learningフレームワークとしては初めて採用し,2015年からPreferred Networks社によって開発が続けられています.Define-by-Runとは,ニューラルネットワーク中の計算を行うコードを記述することでニューラルネットワークの構造を定義する考え方です.学習を行う前にネットワーク構造を定義しておき,そのネットワークに学習に用いるデータを入力するためのコードを別途書く必要がある方法はDefine-and-Runと呼ばれます.Define-by-Runは実行時にネットワーク構造が決定されるため,動的な構造を記述しやすいという特徴があります.\n", "\n", "ここでは,その**柔軟性**と**直感的である**ことを特徴とするこのChainerというフレームワークの基本的な使い方を解説します." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "bIrdN3L9reS0" }, "source": [ "## 環境構築\n", "\n", "まずはColab上で以下のセルを実行し,必要なライブラリをインストールしましょう.ここでは`graphviz`というソフトウェアをインストールしています.これは,後にニューラルネットワークのアーキテクチャをグラフ構造として可視化するために使用します.Google Colab上には,ChainerやCuPyは予めインストールされています." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "-IPVDlAAMtK1", "outputId": "d917f186-0dd5-4d01-de1c-e0f278191483", "colab": { "base_uri": "https://localhost:8080/", "height": 287 } }, "source": [ "!apt-get install -y graphviz" ], "execution_count": 1, "outputs": [ { "output_type": "stream", "text": [ "Reading package lists... Done\n", "Building dependency tree \n", "Reading state information... Done\n", "graphviz is already the newest version (2.40.1-2).\n", "The following packages were automatically installed and are no longer required:\n", " cuda-cufft-10-1 cuda-cufft-dev-10-1 cuda-curand-10-1 cuda-curand-dev-10-1\n", " cuda-cusolver-10-1 cuda-cusolver-dev-10-1 cuda-cusparse-10-1\n", " cuda-cusparse-dev-10-1 cuda-license-10-2 cuda-npp-10-1 cuda-npp-dev-10-1\n", " cuda-nsight-10-1 cuda-nsight-compute-10-1 cuda-nsight-systems-10-1\n", " cuda-nvgraph-10-1 cuda-nvgraph-dev-10-1 cuda-nvjpeg-10-1\n", " cuda-nvjpeg-dev-10-1 cuda-nvrtc-10-1 cuda-nvrtc-dev-10-1 cuda-nvvp-10-1\n", " libcublas10 libnvidia-common-430 nsight-compute-2019.5.0\n", " nsight-systems-2019.5.2\n", "Use 'apt autoremove' to remove them.\n", "0 upgraded, 0 newly installed, 0 to remove and 5 not upgraded.\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "YLbP1BkTMq3W" }, "source": [ "それでは,以下のコマンドをターミナルで実行し,Chainerや,ChainerでGPUを活用するために必要となるCuPyというパッケージが正しくインストールされているかどうかを確認してみましょう." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "pNPcxcV1Mq3X", "outputId": "051bc695-f8b1-418d-e253-1c832f0123c3", "colab": { "base_uri": "https://localhost:8080/", "height": 287 } }, "source": [ "!python -c 'import chainer; chainer.print_runtime_info()'" ], "execution_count": 2, "outputs": [ { "output_type": "stream", "text": [ "Platform: Linux-4.14.137+-x86_64-with-Ubuntu-18.04-bionic\n", "Chainer: 6.5.0\n", "ChainerX: Not Available\n", "NumPy: 1.17.4\n", "CuPy:\n", " CuPy Version : 6.5.0\n", " CUDA Root : /usr/local/cuda\n", " CUDA Build Version : 10010\n", " CUDA Driver Version : 10010\n", " CUDA Runtime Version : 10010\n", " cuDNN Build Version : 7603\n", " cuDNN Version : 7603\n", " NCCL Build Version : 2402\n", " NCCL Runtime Version : 2402\n", "iDeep: 2.0.0.post3\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "8GFokOwXMq3b" }, "source": [ "Chainer, NumPy, そしてCuPy, さらにCuPyの下にCUDAやcuDNN, NCCLといった項目があり,それぞれバージョン番号が表示されていれば成功です." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "Cp1v4ygDMq3f" }, "source": [ "## Chainerの基本的な使い方\n", "\n", "はじめに,シンプルなタスクに実際に取り組むことによって,Chainerの基本的な使い方を説明していきます.さっそく,有名な手書き数字のデータセットMNISTを使って,画像を10クラス(数字の0 - 9)のいずれかに分類するネットワークを書き,学習させてみましょう." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "pON7OjrkMq3f" }, "source": [ "### データセットの準備\n", "\n", "まずは学習対象となる**データセット**の準備をします.教師あり学習の場合,データセットは**「入力データ」と「それと対になるラベルデータ」のペアを返すオブジェクト**である必要があります.\n", "\n", "Chainerには,MNISTやCIFAR10/100のような良く用いられるデータセットに対して,データのダウンロードからオブジェクト作成までを自動的に行ってくれる便利なメソッドがあります.ここではひとまずこれを用いましょう." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "co0qbD2dMq3f", "outputId": "7398e5b5-e1b4-4390-abc1-b59047fa470d", "colab": { "base_uri": "https://localhost:8080/", "height": 89 } }, "source": [ "from chainer.datasets import mnist\n", "\n", "# データセットがダウンロード済みでなければ,ダウンロードも行う\n", "train_val, test = mnist.get_mnist(withlabel=True, ndim=1)" ], "execution_count": 3, "outputs": [ { "output_type": "stream", "text": [ "Downloading from http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz...\n", "Downloading from http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz...\n", "Downloading from http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz...\n", "Downloading from http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz...\n" ], "name": "stderr" } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "k6phOMcvMq3j" }, "source": [ "データセットオブジェクトの準備ができました.このオブジェクトは, `train_val[i]` のように指定すると,**i番目の (data, label) というタプルを返すリスト** と同様のものと考えてください.(実際ただのPythonリストもChainerのデータセットオブジェクトとして利用可能です).それでは,0番目のデータとラベルを取り出して,表示してみましょう." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "uylrRDSfMq3k", "outputId": "72c4359d-5bb7-45c3-8613-bca625f55368", "colab": { "base_uri": "https://localhost:8080/", "height": 266 } }, "source": [ "# matplotlibを使ったグラフ描画結果がnotebook内に表示されるようにします.\n", "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "\n", "# データの例示\n", "x, t = train_val[0] # 0番目の (data, label) を取り出す\n", "plt.imshow(x.reshape(28, 28), cmap='gray')\n", "plt.axis('off')\n", "plt.show()\n", "print('label:', t)" ], "execution_count": 4, "outputs": [ { "output_type": "display_data", "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOcAAADnCAYAAADl9EEgAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0\ndHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAGc0lEQVR4nO3dOWhVfx7G4bmjWChqSKMgiGihqEga\nFUQQkSCCFlGbgJViZcAqjZ1FRHApRItUgo1YujRaxKUQBHFpAvZKOo1L3Ii50w0M5H7zN8vkvcnz\nlHk5nlP44YA/Tmw0m81/AXn+Pd8PAExOnBBKnBBKnBBKnBBqaTU2Gg3/lAtzrNlsNib7uTcnhBIn\nhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBIn\nhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhFo63w/A\n/1qyZEm5r169ek7v39fX13Jbvnx5ee3mzZvL/cyZM+V++fLllltvb2957c+fP8v94sWL5X7+/Ply\nnw/enBBKnBBKnBBKnBBKnBBKnBBKnBDKOeck1q9fX+7Lli0r9z179pT73r17W24dHR3ltceOHSv3\n+fT+/ftyv3btWrn39PS03L5+/Vpe+/bt23J/+vRpuSfy5oRQ4oRQ4oRQ4oRQ4oRQ4oRQjWaz2Xps\nNFqPbayrq6vch4aGyn2uP9tKNTExUe4nT54s92/fvk373iMjI+X+6dOncn/37t207z3Xms1mY7Kf\ne3NCKHFCKHFCKHFCKHFCKHFCKHFCqEV5ztnZ2VnuL168KPeNGzfO5uPMqqmefXR0tNz379/fcvv9\n+3d57WI9/50p55zQZsQJocQJocQJocQJocQJocQJoRblr8b8+PFjuff395f74cOHy/3169flPtWv\niKy8efOm3Lu7u8t9bGys3Ldt29ZyO3v2bHkts8ubE0KJE0KJE0KJE0KJE0KJE0KJE0Ityu85Z2rV\nqlXlPtV/Vzc4ONhyO3XqVHntiRMnyv327dvlTh7fc0KbESeEEieEEieEEieEEieEEieEWpTfc87U\nly9fZnT958+fp33t6dOny/3OnTvlPtX/sUkOb04IJU4IJU4IJU4IJU4IJU4I5ZOxebBixYqW2/37\n98tr9+3bV+6HDh0q90ePHpU7/38+GYM2I04IJU4IJU4IJU4IJU4IJU4I5ZwzzKZNm8r91atX5T46\nOlrujx8/LveXL1+23G7cuFFeW/1dojXnnNBmxAmhxAmhxAmhxAmhxAmhxAmhnHO2mZ6ennK/efNm\nua9cuXLa9z537ly537p1q9xHRkamfe+FzDkntBlxQihxQihxQihxQihxQihxQijnnAvM9u3by/3q\n1avlfuDAgWnfe3BwsNwHBgbK/cOHD9O+dztzzgltRpwQSpwQSpwQSpwQSpwQSpwQyjnnItPR0VHu\nR44cablN9a1oozHpcd1/DQ0NlXt3d3e5L1TOOaHNiBNCiRNCiRNCiRNCiRNCOUrhH/v161e5L126\ntNzHx8fL/eDBgy23J0+elNe2M0cp0GbECaHECaHECaHECaHECaHECaHqgynazo4dO8r9+PHj5b5z\n586W21TnmFMZHh4u92fPns3oz19ovDkhlDghlDghlDghlDghlDghlDghlHPOMJs3by73vr6+cj96\n9Gi5r1279q+f6Z/68+dPuY+MjJT7xMTEbD5O2/PmhFDihFDihFDihFDihFDihFDihFDOOefAVGeJ\nvb29LbepzjE3bNgwnUeaFS9fviz3gYGBcr93795sPs6C580JocQJocQJocQJocQJocQJoRylTGLN\nmjXlvnXr1nK/fv16uW/ZsuWvn2m2vHjxotwvXbrUcrt79255rU++Zpc3J4QSJ4QSJ4QSJ4QSJ4QS\nJ4QSJ4RasOecnZ2dLbfBwcHy2q6urnLfuHHjtJ5pNjx//rzcr1y5Uu4PHz4s9x8/fvz1MzE3vDkh\nlDghlDghlDghlDghlDghlDghVOw55+7du8u9v7+/3Hft2tVyW7du3bSeabZ8//695Xbt2rXy2gsX\nLpT72NjYtJ6JPN6cEEqcEEqcEEqcEEqcEEqcEEqcECr2nLOnp2dG+0wMDw+X+4MHD8p9fHy83Ktv\nLkdHR8trWTy8OSGUOCGUOCGUOCGUOCGUOCGUOCFUo9lsth4bjdYjMCuazWZjsp97c0IocUIocUIo\ncUIocUIocUIocUIocUIocUIocUIocUIocUIocUIocUIocUIocUIocUIocUIocUIocUIocUIocUKo\n8ldjAvPHmxNCiRNCiRNCiRNCiRNCiRNC/QfM6zUP81ILVgAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } }, { "output_type": "stream", "text": [ "label: 5\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "oTy7XDwMMq3o" }, "source": [ "### Validation用データセットを作る\n", "\n", "次に,さきほど作成した`train_val`データセットを,Training用のデータセットとValidation用のデータセットに分割します.Validationデータセットとは,学習には用いずにモデルの汎化性能をチェックしたり,学習率などのハイパーパラメータを調整するために用いる検証用のデータセットスプリットのことです.分割処理も,Chainerが提供しているデータセット分割用の関数を用いて行うことができます.元々60000個のデータが入っている`train`データセットを,ランダムに選択された50000個のデータと残りの10000個のデータの2つに分割しましょう.これには,`split_dataset_random`という関数を使用します." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "xeCk_TCcMq3o", "colab": {} }, "source": [ "from chainer.datasets import split_dataset_random\n", "\n", "train, valid = split_dataset_random(train_val, 50000, seed=0)" ], "execution_count": 5, "outputs": [] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "kJrPx08DMq3q" }, "source": [ "関数の第1引数が分割したい対象のデータセットオブジェクト,第2引数が1つ目のデータセットの要素数,第3引数がランダムな抽出を行う際に用いられる乱数シード(これは省略可)となります.第3引数の`seed`として同じ値を指定すると,再実行した際にデータセットを同じように分割するようになります.それでは,それぞれのデータセットの中に入っているデータの数を確認してみましょう." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "TfT0WBQfMq3r", "outputId": "9164d3c3-a17f-4005-9afe-3d6763315429", "colab": { "base_uri": "https://localhost:8080/", "height": 53 } }, "source": [ "print('Training dataset size:', len(train))\n", "print('Validation dataset size:', len(valid))" ], "execution_count": 6, "outputs": [ { "output_type": "stream", "text": [ "Training dataset size: 50000\n", "Validation dataset size: 10000\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "IbZLLj6ZMq3v" }, "source": [ "### Iteratorの作成\n", "\n", "次に,さきほど準備したデータセットオブジェクトから,幾つかのデータ(入力とラベルのペア)を束ねて学習モデルに次々に渡す,**Iterator**という機能を紹介します.なぜIteratorの機能が必要かというと,ニューラルネットワークのパラメータを更新する際に利用される,確率的勾配降下法(Stochastic Gradient Descent, SGD)をはじめとする最適化手法では,一つのデータだけを元に更新する処理を繰り返すのではなく,幾つかのデータを束ねた **ミニバッチ** を元に計算していくのが一般的となっているためです(ミニバッチ計算が一般的である理由としては,勾配のミニバッチ平均を計算することでパラメータ更新が安定することや,GPUなどを用いた並列化がしやすいこと等が挙げられます).\n", "\n", "`Iterator`は,さきほど作成したデータセットオブジェクトを引数として指定し,`next()`メソッドを呼ぶことで新しいミニバッチを返してくれます.データセット内のデータすべてを1度ずつ学習に利用し終えた時点のことを **1エポック(epoch)** と呼びます.Iteratorの内部では,学習中に何エポックまで学習を行ったか,などの情報が逐次記録されており,データセット内のデータを何度も使って学習のループを回すようなコードを簡単に書くことができるようになります.\n", "\n", "データセットオブジェクトからイテレータを作るには,以下のようにします." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "cZdvCRhxMq3w", "colab": {} }, "source": [ "from chainer import iterators\n", "\n", "batchsize = 128\n", "\n", "train_iter = iterators.SerialIterator(train, batchsize)\n", "valid_iter = iterators.SerialIterator(\n", " valid, batchsize, repeat=False, shuffle=False)\n", "test_iter = iterators.SerialIterator(\n", " test, batchsize, repeat=False, shuffle=False)" ], "execution_count": 7, "outputs": [] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "elxQ9EGEMq30" }, "source": [ "今,学習データセット用のイテレータ(`train_iter`)と,検証データセット用のイテレータ(`valid_iter`),および学習したネットワークの評価に用いるテストデータセット用のイテレータ(`test_iter`)の計3つを作成しました.ここでは`batchsize = 128`としているため,作成した3つのイテレータは`next()`メソッドが(`train_iter.next()`のように)呼ばれると,**128枚の数字画像データ**を一括りにして返します.実際に`next()`の返り値を調べてみましょう." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "q8NpWnEyPVDJ", "colab": {} }, "source": [ "minibatch = train_iter.next()" ], "execution_count": 8, "outputs": [] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "MH5CRLQdRhBb" }, "source": [ "この`minibatch`という変数は,`(img, label)`というタプルが128個(ミニバッチサイズだけ)並んだリストになっています.実際に,このリストの長さが128であることを確認してみましょう." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "BdkvW4y2RlJt", "outputId": "e9b6d62c-e316-4b44-fa1f-6c28f8c5450b", "colab": { "base_uri": "https://localhost:8080/", "height": 35 } }, "source": [ "print('batchsize:', len(minibatch))" ], "execution_count": 9, "outputs": [ { "output_type": "stream", "text": [ "batchsize: 128\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "b2Tkc_aCWTTk" }, "source": [ "次に,この`minibatch`というリストの一つ目の要素(画像とラベルを持つタプルになっているはずです)を`minibatch[0]`として取り出してみます." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "TGrVsbkmWqkm", "outputId": "a4b803cf-7cb3-4fba-a76a-13580180188f", "colab": { "base_uri": "https://localhost:8080/", "height": 53 } }, "source": [ "x, t = minibatch[0]\n", "\n", "print('x:', x.shape)\n", "print('t:', t.shape)" ], "execution_count": 10, "outputs": [ { "output_type": "stream", "text": [ "x: (784,)\n", "t: ()\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "8xflt5_YRXBp" }, "source": [ "そのときの返り値である2つの配列 `x` と `t` のshapeを調べてみると,データはそれぞれ長さ784のベクトルとして格納されており,正解ラベルはスカラー値となっています.784は,$28 \\times 28$で,28ピクセル四方の画像データの画素値を1列に並べたものになっています." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "71RNU5KmMq31" }, "source": [ "#### SerialIteratorについて\n", "\n", "Chainerにいくつか用意されているイテレータの一種である`SerialIterator`は,データセットの中のデータを順番に取り出してくる最もシンプルなイテレータです.`SerialIterator` のコンストラクタ(クラスをインスタンス化するタイミングで呼ばれるメソッド)の引数にデータセットオブジェクトと,バッチサイズを取ります.このとき,渡したデータセットオブジェクトから,データを繰り返し読み出す必要がある場合は`repeat`引数を`True`とし,1周が終わったらそれ以上データを取り出したくない場合はこれを`False`とします.これは,主にvalidation用のデータセットに対して使うフラグです.デフォルトでは,`True`になっています.また,`shuffle`引数に`True`を渡すと,データセットから取り出されてくるデータの順番をエポックごとにランダムに変更します.`SerialIterator`の他にも,マルチプロセスで高速にデータを処理できるようにした`MultiprocessIterator`や`MultithreadIterator`など,複数のイテレータが用意されています.詳しくは以下を見てください.\n", "\n", "- [Chainerで使えるIterator一覧](https://docs.chainer.org/en/stable/reference/iterators.html)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "PX0GJaWLMq32" }, "source": [ "### ネットワークの定義\n", "\n", "それでは,学習させるネットワークを定義してみましょう.今回は,全結合層のみからなるニューラルネットワーク(多層パーセプトロン)を作ることにして,中間層のユニット数は100とします.今回用いるMNISTデータセットは0〜9までの数字のいずれかを意味する10種のラベルを持つことから,出力ユニット数は10とします.\n", "\n", "ここで,ネットワークを定義するために必要な`Link`, `Function`, `Chain`について簡単に説明します." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "-H4lADrCSI_o" }, "source": [ "#### LinkとFunction\n", "\n", "Chainerでは,ニューラルネットワークの各層を,`Link`と`Function`に区別します.\n", "\n", "- Linkは,**パラメータを持つ**関数です.\n", "- Functionは,**パラメータを持たない**関数です.\n", "\n", "これらを組み合わせてネットワークを記述します.パラメータを持つ層は,`chainer.links`モジュール以下に用意されています.例えば `chainer.links.Linear` は,前章で説明した全結合層に対応しており,内部に `W` と `b` という学習できるパラメータが保持されています.パラメータを持たない層は,`chainer.functions`モジュール以下に用意されています.これらに簡単にアクセスするために,\n", "\n", "```\n", "import chainer.links as L\n", "import chainer.functions as F\n", "```\n", "\n", "と別名を与えて,`L.Convolution2D(...)`や`F.relu(...)`のように用いる慣習がありますが,特にこれが決まった書き方というわけではありません." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "nuv4elsRSLkj" }, "source": [ "#### Chain\n", "\n", "`Chain`は,**パラメータを持つ層(Link)をまとめておくためのクラス**です.パラメータを持つということは,基本的にネットワークの学習の際にそれらを更新していく必要があるということです(更新されないパラメータを持たせることもできます).Chainerでは,モデルのパラメータの更新は,`Optimizer`という機能が担います.その際,更新すべき全てのパラメータを簡単に発見できるように,`Chain`で一箇所にまとめておきます." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "9MoCp9d4SRRh" }, "source": [ "#### 同じ結果を保証する\n", "\n", "ネットワークを書き始める際に乱数シードを固定すると,本記事とほぼ同様の結果が再現できるようになります.(cuDNNが有効になっている環境下でより厳密に計算結果の再現性を保証したい場合は,`chainer.config.cudnn_deterministic`というConfiguringオプションについて知る必要があります.こちらのドキュメントを参照してください:[chainer.config.cudnn_deterministic](https://docs.chainer.org/en/stable/reference/configuration.html?highlight=chainer.config.cudnn_deterministic)." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "5JecdGUXMq32", "colab": {} }, "source": [ "import random\n", "import numpy\n", "import chainer\n", "\n", "def reset_seed(seed=0):\n", " random.seed(seed)\n", " numpy.random.seed(seed)\n", " if chainer.cuda.available:\n", " chainer.cuda.cupy.random.seed(seed)\n", " \n", "reset_seed(0)" ], "execution_count": 11, "outputs": [] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "G_HvOMluMq37" }, "source": [ "#### Chainを継承したネットワークの定義\n", "\n", "Chainerでは,ネットワークは `Chain` クラスを継承したクラスとして定義されることが一般的です. `Chain` を継承することで,中間層のユニット数=100,出力ユニット数=10とした3層の多層パーセプトロンは以下のように書くことができます." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "VQ-6GuZNMq3_", "colab": {} }, "source": [ "import chainer\n", "import chainer.links as L\n", "import chainer.functions as F\n", "\n", "class MLP(chainer.Chain):\n", "\n", " def __init__(self, n_mid_units=100, n_out=10):\n", " super(MLP, self).__init__()\n", " \n", " # パラメータを持つ層の登録\n", " with self.init_scope():\n", " self.l1 = L.Linear(None, n_mid_units)\n", " self.l2 = L.Linear(n_mid_units, n_mid_units)\n", " self.l3 = L.Linear(n_mid_units, n_out)\n", "\n", " def forward(self, x):\n", " # データを受け取った際のforward計算を書く\n", " h1 = F.relu(self.l1(x))\n", " h2 = F.relu(self.l2(h1))\n", " return self.l3(h2)\n", "\n", "gpu_id = 0 # CPUを用いる場合は,この値を-1にしてください\n", "\n", "net = MLP()\n", "\n", "if gpu_id >= 0:\n", " net.to_gpu(gpu_id)" ], "execution_count": 12, "outputs": [] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "BnYIri8AMq4C" }, "source": [ "継承した `MLP` クラスのコンストラクタ内で `with self.init_scope()` が呼ばれており,その中でネットワークに登場する`Link` (具体的には,全結合層の `L.Linear` )が定義されています.このような形で記述することで,`Optimizer` はこれらが最適化対象となるパラメータを持つ層であると自動的に解釈してくれるようになります.\n", "\n", "また, `forward` というメソッドには,関数の名前の通り,ネットワークの順伝播を記述します.`forward` の引数としてデータ `x` を受け取り,出力として順伝播の計算結果を返すようにすることで, `MLP` クラスをインスタンス化して作成されたオブジェクトを,関数のように使えるようになります.(例:`output = net(data)`)\n", "\n", "Chainerには数多くの `Function` や `Link` が用意されています.ぜひ一度以下の一覧のページを見てみてください.\n", "\n", "- [Chainerで使える関数(Function)一覧](https://docs.chainer.org/en/stable/reference/functions.html)\n", "- [Chainerで学習できる層(Link)一覧](https://docs.chainer.org/en/stable/reference/links.html)\n", "\n", "`Link`には,ニューラルネットワークによく用いられる全結合層や畳み込み層,LSTMなどに加えて,ResNetや,VGGなどの有名なネットワーク構造も登録されています.また,`Function`には,ReLUなどの活性化関数や,画像の大きさをresizeする関数,サイン・コサインのような関数を始め,ネットワークの要素として使える関数が登録されています.Define-by-Runでは,データをネットワークに入力して順伝播計算を行ったあとに,データに適用された関数(パラメータあり・なし両方)の履歴をたどり直すことで,バックプロパゲーションによる勾配計算を行うパスを取得するため,パラメータを持たない関数であっても `chainer.functions` に含まれているものを繋げて用いる必要があります." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "o_sws9APSPR1" }, "source": [ "#### GPUで実行するには\n", "\n", "深層学習で用いられるような多くのパラメータを持ったネットワークの学習には,GPUを用いることが一般的となっています.GPUを使うと,行列演算などの一部の処理をCPUに比べとても高速に行うことができます.Chainerで計算をGPUで行う方法は簡単です.`Chain`クラスは`to_gpu`メソッドを持ち,この引数にGPU IDを指定すると,指定したGPU IDのメモリ上にネットワークの全パラメータを転送します.こうしておくと,順伝播も学習の際のパラメータ更新なども全てGPU上で行われるようになります.GPU IDとして-1を指定すると,CPUを使用します." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "qIN7jkqPMq4C" }, "source": [ "#### 入力側ユニット数の自動計算\n", "\n", "上のネットワーク定義で,最初のLinear層は第一引数に`None`が渡されています.このように引数を指定すると,データが最初にその層に入力されたタイミングで,自動的に必要な数の入力側のユニット数を判断し, `n_input` $\\times$ `n_mid_units` の大きさの行列を作成し,学習対象パラメータとして保持します.これは後々,畳み込み層を全結合層の前に配置する際などに便利な機能となるため,覚えておいてください.\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "yF92dGMjMq4M" }, "source": [ "### 最適化手法の選択\n", "\n", "それでは,上で定義したネットワークをMNISTデータセットを使って訓練してみましょう.学習時に用いる最適化の手法は数多く提案されていますが,Chainerは多くの手法を同一のインターフェースで利用できるよう,`Optimizer`という機能でそれらを提供しています.`chainer.optimizers`モジュール以下に定義されています.一覧はこちらにあります:\n", "\n", "- [Chainerで使える最適化手法一覧](https://docs.chainer.org/en/stable/reference/optimizers.html)\n", "\n", "ここでは最もシンプルな勾配降下法の手法である`optimizers.SGD`を用います.`Optimizer`のオブジェクトには,`setup`メソッドを使ってモデル(`Chain`オブジェクト)を渡します.こうすることで`Optimizer`に,何を最適化すればいいか把握させることができます.\n", "\n", "他にもいろいろな最適化手法が手軽に試せるので,色々と試してみて結果の変化を見てみてください.例えば,下の`chainer.optimizers.SGD`のうち`SGD`の部分を`MomentumSGD`, `RMSprop`, `Adam`などに変えるだけで,最適化手法の違いがどのような学習曲線(ロスカーブとも言う.目的関数の値のプロットのこと)の違いを生むかなどを簡単に調べることができます.最適化の手法によっては,人が与える必要があった学習率を適切に自動決定するものもあります." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "Bfr21c6dMq4N", "colab": {} }, "source": [ "from chainer import optimizers\n", "\n", "optimizer = optimizers.SGD(lr=0.01).setup(net)" ], "execution_count": 13, "outputs": [] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "3sFOwliOMq4Q" }, "source": [ "#### 学習率(learning rate)\n", "\n", "今回はSGDの`lr`という引数に $0.01$ を与えました.この値は学習率として知られ,モデルをうまく訓練して良いパフォーマンスを発揮させるために調整する必要がある重要な**ハイパーパラメータ**として知られています.ハイパーパラメータは学習されるパラメータとは異なり人が手で与える学習の設定に関するものやネットワークの構造に関するもののことを指します." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "lqFm-as1Mq4R" }, "source": [ "### 学習の開始\n", "\n", "今回は0〜9の数字を区別する分類問題なので,`softmax_cross_entropy`という損失関数を使って最小化すべき損失を計算します.Softmax関数は,$d$次元のベクトル${\\bf y} \\in \\mathbb{R}^d$が与えられたとき,その各次元の値の合計が1になるように正規化することができます.すなわち,確率分布のような出力を任意の実数ベクトルから作ることができます.${\\bf y}$の$i$番目の次元を$y_i$と書くと,Softmax関数は\n", "\n", "$$\n", "p_i = \\frac{\\exp(y_i)}{\\sum_{j=1}^d \\exp(y_j)}\n", "$$\n", "\n", "と表せます.これによって正規化された出力ベクトルを入力が各クラスに所属する確率を表しているものと考え,正解の1-hotベクトルとの間で前章で説明した交差エントロピーを計算するのが `softmax_cross_entropy` 関数です.\n", "\n", "まずネットワークにデータを渡し,順伝播により予測値を計算します.そして,この予測値と入力データに対応する正解ラベルを損失関数に渡して損失(最小化したい値)を計算をします.損失は,`chainer.Variable`のオブジェクトとして得られます.この`Variable`は,**過去の計算の履歴を覚えていて,辿れるようになっています**.この仕組みが,Define-by-Run [[Tokui 2015]](http://learningsys.org/papers/LearningSys_2015_paper_33.pdf)とよばれる発明の中心的な役割を果たしています.\n", "\n", "計算した損失に対する勾配を**ネットワークに逆向きに計算していく**処理は,Chainerではネットワークが出力した`Variable`から,`backward`メソッドを呼ぶだけで実現できます.これを呼ぶことで,**誤差逆伝播用の計算グラフを構築**し,途中のパラメータの勾配を連鎖率を使って計算してくれます.(詳しくは[日本ソフトウェア科学会におけるチュートリアルの資料](https://www.slideshare.net/mitmul/chainer-79942361)をご覧ください.)\n", "\n", "最後に,計算された各パラメータに対する勾配を用いて,`Optimizer`によってネットワークパラメータの更新(=学習)が行われます.\n", "\n", "まとめると,一連の更新処理の中で行われるのは,以下の4項目となります.\n", "\n", "1. ネットワークにデータを渡して順伝播を計算し,出力`y`を得る\n", "2. 出力`y`と正解ラベル`t`を使って,最小化すべき損失を`softmax_cross_entropy`関数で計算する\n", "3. `softmax_cross_entropy`関数の出力(`Variable`)の`backward`メソッドを呼んで,ネットワークの全てのパラメータの勾配を誤差逆伝播法で計算する\n", "4. Optimizerの`update`メソッドを呼び,3.で計算した勾配を使って全パラメータを更新する\n", "\n", "パラメータの更新は,上記ステップを繰り返すことで行われます.一度のパラメータ更新に用いられるデータは,ネットワークに入力された,ミニバッチとして束ねられたデータのみです.次々と新しいミニバッチを入力し,上記のステップを繰り返すことで,データセット全体を用いて学習を行います.この過程を**学習ループ**と呼んでいます." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "4CEuZN9GSr8o" }, "source": [ "#### 目的関数\n", "\n", "目的関数として,例えば分類問題ではなく回帰問題を解きたいような場合,`F.softmax_cross_entropy`の代わりに`F.mean_squared_error`などを用いることもできます.他にも,いろいろな問題設定に対応するために様々な損失関数がChainerには用意されています.こちらからその一覧を見ることができます:\n", "\n", "- [Chainerで使える目的関数(損失関数)一覧](http://docs.chainer.org/en/stable/reference/functions.html#loss-functions)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "bLSWGShBSuNk" }, "source": [ "#### 学習ループのコード" ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "zBYXpUQpMq4S", "outputId": "9444d148-7adc-41ef-9f2d-057b7e0358cc", "colab": { "base_uri": "https://localhost:8080/", "height": 215 } }, "source": [ "import numpy as np\n", "from chainer.dataset import concat_examples\n", "from chainer.cuda import to_cpu\n", "\n", "max_epoch = 10\n", "\n", "while train_iter.epoch < max_epoch:\n", " \n", " # ---------- 学習の1イテレーション ----------\n", " train_batch = train_iter.next()\n", " x, t = concat_examples(train_batch, gpu_id)\n", " \n", " # 予測値の計算\n", " y = net(x)\n", "\n", " # 損失の計算\n", " loss = F.softmax_cross_entropy(y, t)\n", "\n", " # 勾配の計算\n", " net.cleargrads()\n", " loss.backward()\n", "\n", " # パラメータの更新\n", " optimizer.update()\n", " # --------------- ここまで ----------------\n", "\n", " # 1エポック終了ごとにValidationデータに対する予測精度を測って,\n", " # モデルの汎化性能が向上していることをチェックしよう\n", " if train_iter.is_new_epoch: # 1 epochが終わったら\n", "\n", " # 損失の表示\n", " print('epoch:{:02d} train_loss:{:.4f} '.format(\n", " train_iter.epoch, float(to_cpu(loss.data))), end='')\n", "\n", " valid_losses = []\n", " valid_accuracies = []\n", " while True:\n", " valid_batch = valid_iter.next()\n", " x_valid, t_valid = concat_examples(valid_batch, gpu_id)\n", "\n", " # Validationデータをforward\n", " with chainer.using_config('train', False), \\\n", " chainer.using_config('enable_backprop', False):\n", " y_valid = net(x_valid)\n", "\n", " # 損失を計算\n", " loss_valid = F.softmax_cross_entropy(y_valid, t_valid)\n", " valid_losses.append(to_cpu(loss_valid.array))\n", "\n", " # 精度を計算\n", " accuracy = F.accuracy(y_valid, t_valid)\n", " accuracy.to_cpu()\n", " valid_accuracies.append(accuracy.array)\n", " \n", " if valid_iter.is_new_epoch:\n", " valid_iter.reset()\n", " break\n", "\n", " print('val_loss:{:.4f} val_accuracy:{:.4f}'.format(\n", " np.mean(valid_losses), np.mean(valid_accuracies)))\n", " \n", "# テストデータでの評価\n", "test_accuracies = []\n", "while True:\n", " test_batch = test_iter.next()\n", " x_test, t_test = concat_examples(test_batch, gpu_id)\n", "\n", " # テストデータをforward\n", " with chainer.using_config('train', False), \\\n", " chainer.using_config('enable_backprop', False):\n", " y_test = net(x_test)\n", "\n", " # 精度を計算\n", " accuracy = F.accuracy(y_test, t_test)\n", " accuracy.to_cpu()\n", " test_accuracies.append(accuracy.array)\n", "\n", " if test_iter.is_new_epoch:\n", " test_iter.reset()\n", " break\n", "\n", "print('test_accuracy:{:.4f}'.format(np.mean(test_accuracies)))" ], "execution_count": 14, "outputs": [ { "output_type": "stream", "text": [ "epoch:01 train_loss:0.9100 val_loss:0.9743 val_accuracy:0.8018\n", "epoch:02 train_loss:0.5396 val_loss:0.5336 val_accuracy:0.8645\n", "epoch:03 train_loss:0.4012 val_loss:0.4230 val_accuracy:0.8847\n", "epoch:04 train_loss:0.3329 val_loss:0.3741 val_accuracy:0.8941\n", "epoch:05 train_loss:0.4588 val_loss:0.3455 val_accuracy:0.9002\n", "epoch:06 train_loss:0.2481 val_loss:0.3274 val_accuracy:0.9074\n", "epoch:07 train_loss:0.3306 val_loss:0.3109 val_accuracy:0.9118\n", "epoch:08 train_loss:0.3801 val_loss:0.2990 val_accuracy:0.9145\n", "epoch:09 train_loss:0.2974 val_loss:0.2886 val_accuracy:0.9180\n", "epoch:10 train_loss:0.3216 val_loss:0.2803 val_accuracy:0.9204\n", "test_accuracy:0.9234\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "VPRotZdNMq4V" }, "source": [ "`val_accuracy`に着目してみると,最終的におよそ92%程度の精度で手書きの数字が分類できるようになりました.ここで言う精度とは,Validationデータセット中に $N$ 個のデータがあり分類結果が正しかったものが $M$ 個あるとすると $M/N$ を指します.学習中は,各ループの終わりに始めに取り分けておいたValidationデータセットを使って精度をはかることで,モデルの汎化性能をチェックしています.汎化性能とは,主に未知のデータに対する性能の高さのことを意味します.学習終了後には,テスト用のデータセットを用いて,学習が完了したネットワークの評価を行います.テストデータでの評価結果は,およそ92.37%の正解率となりました." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "2dr2sZcZS2Ee" }, "source": [ "#### ValidationやTestを行う際の注意点\n", "\n", "学習終了後の最終的な評価には,ハイパーパラメータ調整などにも用いられるValidationデータセットとはさらに別のTestデータセットを用います.TestデータセットはTrainingデータセットともValidationデータセットともデータの重複がないように用意しておきます.\n", "\n", "さて,これまでは主に,「学習」のやり方について説明してきましたが,「評価」を行う際には注意すべき点があります.なぜなら,一部の関数や,計算過程において,学習時と評価時でその挙動が異なるためです.以下では,それらの挙動の違いを制御するための方法について説明します." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "hlx3Vz7IS3a8" }, "source": [ "##### `chainer.using_config('train', False)`\n", "\n", "先程の例では,学習時と推論時で動作が異なる関数は含まれていませんでしたが,Validationやテストのために推論を行うときは以下のように,`chainer.using_config('train', False)`をwith構文と共に使うことで,その中では**対応する関数が推論モードとして動作**することになります.これによって,学習時と推論時で挙動が異なる関数などが正しく推論のための動作をするようになります(例えば,[Dropout](https://en.wikipedia.org/wiki/Dropout_(neural_networks))など).詳しくはこちらの `train` の項をお読みください:[Configuration Keys](https://docs.chainer.org/en/stable/reference/configuration.html#configuration-keys).\n", "\n", "```python\n", "with chainer.using_config('train', False):\n", " --- 何か推論処理 ---\n", "```\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "6KN2FciDS7zX" }, "source": [ "##### `chainer.using_config('enable_backprop', False)`\n", "\n", "評価のみ行うことを考えた場合,出力の計算後に損失関数の各パラメータについての勾配の情報は不要なため,`chainer.using_config('enable_backprop', False)`とすることで,**無駄な計算グラフの構築が行われず,メモリ消費量を節約**することができます.詳しくはこちらの `enable_backprop` の項をお読みください:[Configuration Keys](https://docs.chainer.org/en/stable/reference/configuration.html#configuration-keys)." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "vFLgWimWS9d4" }, "source": [ "##### ChainerのConfig\n", "\n", "Chainerにはこの他にも,いくつかのグローバルなConfigが用意されています.また,`chainer.config`以下にユーザが自由な設定値を置くこともできます.詳しくはこちらを一読してください:[Configuring Chainer](https://docs.chainer.org/en/stable/reference/configuration.html)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "kBF9Qld0Mq4V" }, "source": [ "### 学習済みモデルの保存\n", "\n", "学習が終了後,その結果を保存します.Chainerには,2種類のフォーマットで学習済みネットワークをファイルに保存する機能が用意されています.一つはHDF5形式,もう一つはNumPyのNPZ形式で,ネットワークを保存します.今回は,追加ライブラリのインストールが必要なHDF5ではなく,NumPy標準機能で提供されているシリアライズ機能(`numpy.savez()`)を利用したNPZ形式でのモデルの保存を行います." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "sE7aEqoaMq4W", "colab": {} }, "source": [ "from chainer import serializers\n", "\n", "serializers.save_npz('my_mnist.model', net)" ], "execution_count": 15, "outputs": [] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "o6lpheDtMq4X", "outputId": "51b26a3c-985d-40dd-b97c-fba9e63f6729", "colab": { "base_uri": "https://localhost:8080/", "height": 35 } }, "source": [ "# 保存されていることを確認\n", "%ls -la my_mnist.model" ], "execution_count": 16, "outputs": [ { "output_type": "stream", "text": [ "-rw-r--r-- 1 root root 334084 Dec 9 11:13 my_mnist.model\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "2g89uLBEMq4a" }, "source": [ "### 保存したモデルを読み込んで推論\n", "\n", "学習が終了して保存したモデルを読み込み,推論を行う方法について説明します.はじめに,学習に利用したネットワークを再度インスタンス化して,そこにさきほど保存したNPZファイルを読み込ませます." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "XoRl-oIEMq4a", "colab": {} }, "source": [ "# まず同じネットワークのオブジェクトを作る\n", "infer_net = MLP()\n", "\n", "# そのオブジェクトに保存済みパラメータをロードする\n", "serializers.load_npz('my_mnist.model', infer_net)" ], "execution_count": 17, "outputs": [] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "4klyoIO7Mq4d" }, "source": [ "以上で準備が整いました.それでは,試しにテストデータの中から一つ目の画像を取ってきて,それに対する分類を行ってみましょう." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "le0Fo53xMq4f", "outputId": "cd985e80-2abd-4f96-e2c0-14942a680623", "colab": { "base_uri": "https://localhost:8080/", "height": 301 } }, "source": [ "gpu_id = 0 # CPUで計算をしたい場合は,-1を指定してください\n", "\n", "if gpu_id >= 0:\n", " infer_net.to_gpu(gpu_id)\n", "\n", "# 1つ目のテストデータを取り出します\n", "x, t = test[0] # tは使わない\n", "\n", "# どんな画像か表示してみます\n", "plt.imshow(x.reshape(28, 28), cmap='gray')\n", "plt.show()\n", "\n", "# ミニバッチの形にする(複数の画像をまとめて推論に使いたい場合は,サイズnのミニバッチにしてまとめればよい)\n", "print('元の形:', x.shape, end=' -> ')\n", "\n", "x = x[None, ...]\n", "\n", "print('ミニバッチの形にしたあと:', x.shape)\n", "\n", "# ネットワークと同じデバイス上にデータを送る\n", "x = infer_net.xp.asarray(x)\n", "\n", "# モデルのforward関数に渡す\n", "with chainer.using_config('train', False), chainer.using_config('enable_backprop', False):\n", " y = infer_net(x)\n", "\n", "# Variable形式で出てくるので中身を取り出す\n", "y = y.array\n", "\n", "# 結果をCPUに送る\n", "y = to_cpu(y)\n", "\n", "# 予測確率の最大値のインデックスを見る\n", "pred_label = y.argmax(axis=1)\n", "\n", "print('ネットワークの予測:', pred_label[0])" ], "execution_count": 18, "outputs": [ { "output_type": "display_data", "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPsAAAD4CAYAAAAq5pAIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0\ndHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAM3ElEQVR4nO3dXahc9bnH8d/vpCmI6UXiS9ik0bTB\nC8tBEo1BSCxbQktOvIjFIM1FyYHi7kWUFkuo2It4WaQv1JvALkrTkmMJpGoQscmJxVDU4o5Es2NI\njCGaxLxYIjQRJMY+vdjLso0za8ZZa2ZN8nw/sJmZ9cya9bDMz7VmvczfESEAV77/aroBAINB2IEk\nCDuQBGEHkiDsQBJfGeTCbHPoH+iziHCr6ZW27LZX2j5o+7Dth6t8FoD+cq/n2W3PkHRI0nckHZf0\nmqS1EfFWyTxs2YE+68eWfamkwxFxJCIuSPqTpNUVPg9AH1UJ+zxJx6a9Pl5M+xzbY7YnbE9UWBaA\nivp+gC4ixiWNS+zGA02qsmU/IWn+tNdfL6YBGEJVwv6apJtsf8P2VyV9X9L2etoCULeed+Mj4qLt\nByT9RdIMSU9GxP7aOgNQq55PvfW0ML6zA33Xl4tqAFw+CDuQBGEHkiDsQBKEHUiCsANJEHYgCcIO\nJEHYgSQIO5AEYQeSIOxAEoQdSIKwA0kQdiAJwg4kQdiBJAg7kARhB5Ig7EAShB1IgrADSRB2IAnC\nDiRB2IEkCDuQBGEHkiDsQBKEHUiCsANJ9Dw+uyTZPirpnKRPJV2MiCV1NAWgfpXCXrgrIv5Rw+cA\n6CN244EkqoY9JO2wvcf2WKs32B6zPWF7ouKyAFTgiOh9ZnteRJywfb2knZIejIjdJe/vfWEAuhIR\nbjW90pY9Ik4Uj2ckPS1paZXPA9A/PYfd9tW2v/bZc0nflTRZV2MA6lXlaPxcSU/b/uxz/i8iXqil\nKwC1q/Sd/UsvjO/sQN/15Ts7gMsHYQeSIOxAEoQdSIKwA0nUcSNMCmvWrGlbu//++0vnff/990vr\nH3/8cWl9y5YtpfVTp061rR0+fLh0XuTBlh1IgrADSRB2IAnCDiRB2IEkCDuQBGEHkuCuty4dOXKk\nbW3BggWDa6SFc+fOta3t379/gJ0Ml+PHj7etPfbYY6XzTkxcvr+ixl1vQHKEHUiCsANJEHYgCcIO\nJEHYgSQIO5AE97N3qeye9VtuuaV03gMHDpTWb7755tL6rbfeWlofHR1tW7vjjjtK5z127Fhpff78\n+aX1Ki5evFha/+CDD0rrIyMjPS/7vffeK61fzufZ22HLDiRB2IEkCDuQBGEHkiDsQBKEHUiCsANJ\ncD/7FWD27Nlta4sWLSqdd8+ePaX122+/vaeeutHp9/IPHTpUWu90/cKcOXPa1tavX18676ZNm0rr\nw6zn+9ltP2n7jO3JadPm2N5p++3isf2/NgBDoZvd+N9LWnnJtIcl7YqImyTtKl4DGGIdwx4RuyWd\nvWTyakmbi+ebJd1Tc18AatbrtfFzI+Jk8fyUpLnt3mh7TNJYj8sBUJPKN8JERJQdeIuIcUnjEgfo\ngCb1eurttO0RSSoez9TXEoB+6DXs2yWtK56vk/RsPe0A6JeO59ltPyVpVNK1kk5L2ijpGUlbJd0g\n6V1J90XEpQfxWn0Wu/Ho2r333lta37p1a2l9cnKybe2uu+4qnffs2Y7/nIdWu/PsHb+zR8TaNqUV\nlToCMFBcLgskQdiBJAg7kARhB5Ig7EAS3OKKxlx//fWl9X379lWaf82aNW1r27ZtK533csaQzUBy\nhB1IgrADSRB2IAnCDiRB2IEkCDuQBEM2ozGdfs75uuuuK61/+OGHpfWDBw9+6Z6uZGzZgSQIO5AE\nYQeSIOxAEoQdSIKwA0kQdiAJ7mdHXy1btqxt7cUXXyydd+bMmaX10dHR0vru3btL61cq7mcHkiPs\nQBKEHUiCsANJEHYgCcIOJEHYgSS4nx19tWrVqra1TufRd+3aVVp/5ZVXeuopq45bdttP2j5je3La\ntEdtn7C9t/hr/18UwFDoZjf+95JWtpj+m4hYVPw9X29bAOrWMewRsVvS2QH0AqCPqhyge8D2m8Vu\n/ux2b7I9ZnvC9kSFZQGoqNewb5K0UNIiSScl/ardGyNiPCKWRMSSHpcFoAY9hT0iTkfEpxHxL0m/\nk7S03rYA1K2nsNsemfbye5Im270XwHDoeJ7d9lOSRiVda/u4pI2SRm0vkhSSjkr6UR97xBC76qqr\nSusrV7Y6kTPlwoULpfNu3LixtP7JJ5+U1vF5HcMeEWtbTH6iD70A6CMulwWSIOxAEoQdSIKwA0kQ\ndiAJbnFFJRs2bCitL168uG3thRdeKJ335Zdf7qkntMaWHUiCsANJEHYgCcIOJEHYgSQIO5AEYQeS\nYMhmlLr77rtL688880xp/aOPPmpbK7v9VZJeffXV0jpaY8hmIDnCDiRB2IEkCDuQBGEHkiDsQBKE\nHUiC+9mTu+aaa0rrjz/+eGl9xowZpfXnn28/5ifn0QeLLTuQBGEHkiDsQBKEHUiCsANJEHYgCcIO\nJMH97Fe4TufBO53rvu2220rr77zzTmm97J71TvOiNz3fz257vu2/2n7L9n7bPy6mz7G90/bbxePs\nupsGUJ9uduMvSvppRHxL0h2S1tv+lqSHJe2KiJsk7SpeAxhSHcMeEScj4vXi+TlJByTNk7Ra0ubi\nbZsl3dOvJgFU96Wujbe9QNJiSX+XNDciThalU5LmtplnTNJY7y0CqEPXR+Ntz5K0TdJPIuKf02sx\ndZSv5cG3iBiPiCURsaRSpwAq6SrstmdqKuhbIuLPxeTTtkeK+oikM/1pEUAdOu7G27akJyQdiIhf\nTyttl7RO0i+Kx2f70iEqWbhwYWm906m1Th566KHSOqfXhkc339mXSfqBpH229xbTHtFUyLfa/qGk\ndyXd158WAdShY9gj4m+SWp6kl7Si3nYA9AuXywJJEHYgCcIOJEHYgSQIO5AEPyV9Bbjxxhvb1nbs\n2FHpszds2FBaf+655yp9PgaHLTuQBGEHkiDsQBKEHUiCsANJEHYgCcIOJMF59ivA2Fj7X/264YYb\nKn32Sy+9VFof5E+Roxq27EAShB1IgrADSRB2IAnCDiRB2IEkCDuQBOfZLwPLly8vrT/44IMD6gSX\nM7bsQBKEHUiCsANJEHYgCcIOJEHYgSQIO5BEN+Ozz5f0B0lzJYWk8Yj4re1HJd0v6YPirY9ExPP9\najSzO++8s7Q+a9asnj+70/jp58+f7/mzMVy6uajmoqSfRsTrtr8maY/tnUXtNxHxy/61B6Au3YzP\nflLSyeL5OdsHJM3rd2MA6vWlvrPbXiBpsaS/F5MesP2m7Sdtz24zz5jtCdsTlToFUEnXYbc9S9I2\nST+JiH9K2iRpoaRFmtry/6rVfBExHhFLImJJDf0C6FFXYbc9U1NB3xIRf5akiDgdEZ9GxL8k/U7S\n0v61CaCqjmG3bUlPSDoQEb+eNn1k2tu+J2my/vYA1KWbo/HLJP1A0j7be4tpj0haa3uRpk7HHZX0\no750iEreeOON0vqKFStK62fPnq2zHTSom6Pxf5PkFiXOqQOXEa6gA5Ig7EAShB1IgrADSRB2IAnC\nDiThQQ65a5vxfYE+i4hWp8rZsgNZEHYgCcIOJEHYgSQIO5AEYQeSIOxAEoMesvkfkt6d9vraYtow\nGtbehrUvid56VWdvN7YrDPSimi8s3J4Y1t+mG9behrUvid56Naje2I0HkiDsQBJNh3284eWXGdbe\nhrUvid56NZDeGv3ODmBwmt6yAxgQwg4k0UjYba+0fdD2YdsPN9FDO7aP2t5ne2/T49MVY+idsT05\nbdoc2zttv108thxjr6HeHrV9olh3e22vaqi3+bb/avst2/tt/7iY3ui6K+lrIOtt4N/Zbc+QdEjS\ndyQdl/SapLUR8dZAG2nD9lFJSyKi8QswbH9b0nlJf4iI/y6mPSbpbET8ovgf5eyI+NmQ9PaopPNN\nD+NdjFY0Mn2YcUn3SPpfNbjuSvq6TwNYb01s2ZdKOhwRRyLigqQ/SVrdQB9DLyJ2S7p0SJbVkjYX\nzzdr6h/LwLXpbShExMmIeL14fk7SZ8OMN7ruSvoaiCbCPk/SsWmvj2u4xnsPSTts77E91nQzLcyN\niJPF81OS5jbZTAsdh/EepEuGGR+addfL8OdVcYDui5ZHxK2S/kfS+mJ3dSjF1HewYTp32tUw3oPS\nYpjx/2hy3fU6/HlVTYT9hKT5015/vZg2FCLiRPF4RtLTGr6hqE9/NoJu8Xim4X7+Y5iG8W41zLiG\nYN01Ofx5E2F/TdJNtr9h+6uSvi9pewN9fIHtq4sDJ7J9taTvaviGot4uaV3xfJ2kZxvs5XOGZRjv\ndsOMq+F11/jw5xEx8D9JqzR1RP4dST9vooc2fX1T0hvF3/6me5P0lKZ26z7R1LGNH0q6RtIuSW9L\n+n9Jc4aotz9K2ifpTU0Fa6Sh3pZrahf9TUl7i79VTa+7kr4Gst64XBZIggN0QBKEHUiCsANJEHYg\nCcIOJEHYgSQIO5DEvwEvYRv57rmVLgAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } }, { "output_type": "stream", "text": [ "元の形: (784,) -> ミニバッチの形にしたあと: (1, 784)\n", "ネットワークの予測: 7\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "tkKEfMPbMq4i" }, "source": [ "ネットワークの予測は7でした.画像を見る限り,正しく予測できていることが確認できます." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "55aQjRHeMq4i" }, "source": [ "## Trainerの使用方法\n", "\n", "Chainerは,これまで書いてきたような学習ループを隠蔽する`Trainer`という機能を提供しています.これを使うと,学習ループを自ら書く必要がなくなり,また便利な拡張機能(`Extention`)を使うことで,学習過程での学習曲線の可視化や,ログの保存なども簡単に行うことができます." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "zqGffNzPMq4j" }, "source": [ "### データセット・Iterator・ネットワークの準備\n", "\n", "データセット,Iterator,ネットワークは,Trainerを使用する場合にも同様に準備します." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "LWIQJgmeMq4k", "colab": {} }, "source": [ "reset_seed(0)\n", "\n", "train_val, test = mnist.get_mnist()\n", "train, valid = split_dataset_random(train_val, 50000, seed=0)\n", "\n", "batchsize = 128\n", "\n", "train_iter = iterators.SerialIterator(train, batchsize)\n", "valid_iter = iterators.SerialIterator(valid, batchsize, False, False)\n", "test_iter = iterators.SerialIterator(test, batchsize, False, False)\n", "\n", "gpu_id = 0 # CPUを用いたい場合は,-1を指定してください\n", "\n", "net = MLP()\n", "\n", "if gpu_id >= 0:\n", " net.to_gpu(gpu_id)" ], "execution_count": 19, "outputs": [] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "qpv-bUQfMq4n" }, "source": [ "### Updaterの準備\n", "\n", "学習ループを自分で書く場合の学習ステップについて再度確認すると,「データセットからミニバッチを作成」「ネットワークに入力して予測を出力」「正解と比較し誤差を計算」「バックワード(誤差逆伝播)を実行」「`Optimizer`によってパラメータを更新」という一連のステップを,以下のように書いていました.\n", "\n", "```python\n", "# ---------- 学習の1イテレーション ----------\n", "train_batch = train_iter.next()\n", "x, t = concat_examples(train_batch, gpu_id)\n", "\n", "# 予測値の計算\n", "y = net(x)\n", "\n", "# 損失の計算\n", "loss = F.softmax_cross_entropy(y, t)\n", "\n", "# 勾配の計算\n", "net.cleargrads()\n", "loss.backward()\n", "\n", "# パラメータの更新\n", "optimizer.update()\n", "```\n", "\n", "Chainerの機能として提供されている`Updater`を用いることで,これらの一連の処理を簡単に書けるようになります.`Updater`には`Iterator`と`Optimizer`を渡します. `Iterator`はデータセットオブジェクトを持っているため,そこからミニバッチを作成します.`Optimizer`は最適化対象のネットワークを持っているため,それを使って順伝播と誤差計算・パラメータのアップデートをすることができます.従って,この2つを渡すことで,`Updater`内で全ての処理が完結します.さっそく,`Updater`オブジェクトを作成してみましょう." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "NIz8Fj2IMq4o", "colab": {} }, "source": [ "from chainer import training\n", "\n", "gpu_id = 0 # CPUを使いたい場合は-1を指定してください\n", "\n", "# ネットワークをClassifierで包んで,損失の計算などをモデルに含める\n", "net = L.Classifier(net)\n", "\n", "# 最適化手法の選択\n", "optimizer = optimizers.SGD(lr=0.01).setup(net)\n", "\n", "# UpdaterにIteratorとOptimizerを渡す\n", "updater = training.StandardUpdater(train_iter, optimizer, device=gpu_id)" ], "execution_count": 20, "outputs": [] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "BywdNhUSMq4s" }, "source": [ "#### 損失計算のためのChain\n", "\n", "ここでは,ネットワークを`L.Classifier`で包んでいます.`L.Classifier`は,渡されたネットワーク自体を`predictor`というattributeに持ち,**損失計算を行う機能を追加してくれます**.こうすることで,`net()`はデータ`x`だけでなくラベル`t`も取るようになり,受け取ったデータを`predictor`に通して予測値を計算し,正解ラベル`t`と比較して**損失のVariableを返します.**損失関数として何を用いるかはデフォルトでは`F.softmax_cross_entropy`となっていますが,`L.Classifier`の引数`lossfun`に損失計算を行う関数を渡してやれば変更することができ,(Classifierという名前ながら)回帰問題などの損失計算機能の追加にも使うことができます.(`L.Classifier(net, lossfun=L.mean_squared_error, compute_accuracy=False)`のようにする)\n", "\n", "`StandardUpdater`は前述のような`Updater`の担当する処理を遂行するための最もシンプルなクラスです.この他にも複数のGPUを用いるための`ParallelUpdater`などが用意されています." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "VxnV33vIMq4s" }, "source": [ "### Trainerの準備\n", "\n", "実際に学習ループ部分を隠蔽しているのは`Updater`ですが,`Trainer`はさらに`Updater`を受け取って学習全体の管理を行う機能を提供しています.例えば,**データセットを何周したら学習を終了するか(stop_trigger)** や,**途中の損失の値をどのファイルに保存したいか**,**学習曲線を可視化した画像ファイルを保存するかどうか**など,学習全体の設定として必須・もしくはあると便利な色々な機能を提供しています.\n", "\n", "必須なものとしては学習終了のタイミングを指定する`stop_trigger`がありますが,これは`Trainer`オブジェクトを作成するときのコンストラクタで指定します.指定の方法は単純で,`(長さ, 単位)`という形のタプルを与えればよいだけです.「長さ」には数字を,「単位」には`'iteration'`もしくは`'epoch'`のいずれかの文字列を指定します.こうすると,たとえば100 epoch(データセット100周)で学習を終了してください,とか,1000 iteration(1000回更新)で学習を終了してください,といったことが指定できます.`Trainer`を作るときに,`stop_trigger`を指定しないと,学習は自動的には止まりません.\n", "\n", "では,実際に`Trainer`オブジェクトを作ってみましょう." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "-K_GXDUVMq4t", "colab": {} }, "source": [ "max_epoch = 10\n", "\n", "# TrainerにUpdaterを渡す\n", "trainer = training.Trainer(\n", " updater, (max_epoch, 'epoch'), out='results/mnist_result')" ], "execution_count": 21, "outputs": [] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "LtZDUXIUMq4v" }, "source": [ "`out`引数では,この次に説明する`Extension`を使って,ログファイルや損失の変化の過程を描画したグラフの画像ファイルなどを保存するディレクトリを指定しています.\n", "\n", "Trainerと,その内側にあるいろいろなオブジェクトの関係は,図にまとめると以下のようになっています.このイメージを持っておくと自分で部分的に改造したりする際に便利だと思います.\n", "\n", "![Trainerに関連するオブジェクト間の関係図](https://qiita-image-store.s3.amazonaws.com/0/17934/a751df31-b999-f692-d839-488c26b1c48a.png)\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "WgLOnmhuMq4v" }, "source": [ "### TrainerにExtensionを追加\n", "\n", "`Trainer`を使う利点として,\n", "\n", "- ログを自動的にファイルに保存(`LogReport`)\n", "- ターミナルに定期的に損失などの情報を表示(`PrintReport`)\n", "- 損失を定期的にグラフで可視化して画像として保存(`PlotReport`)\n", "- 定期的にモデルやOptimizerの状態を自動シリアライズ(`snapshot`)\n", "- 学習の進捗を示すプログレスバーを表示(`ProgressBar`)\n", "- ネットワークの構造をGraphvizのdot形式で保存(`dump_graph`)\n", "- ネットワークのパラメータの平均や分散などの統計情報を出力(`ParameterStatistics`)\n", "\n", "などの様々な便利な機能を簡単に利用することができる点があります.これらの機能を利用するには,`Trainer`オブジェクトに対して`extend`メソッドを使って追加したい`Extension`のオブジェクトを渡すだけです.では実際に幾つかの`Extension`を追加してみましょう." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "oAtZtGfWMq4w", "colab": {} }, "source": [ "from chainer.training import extensions\n", "\n", "trainer.extend(extensions.LogReport())\n", "trainer.extend(extensions.snapshot(filename='snapshot_epoch-{.updater.epoch}'))\n", "trainer.extend(extensions.Evaluator(valid_iter, net, device=gpu_id), name='val')\n", "trainer.extend(extensions.PrintReport(['epoch', 'main/loss', 'main/accuracy', 'val/main/loss', 'val/main/accuracy', 'l1/W/data/std', 'elapsed_time']))\n", "trainer.extend(extensions.ParameterStatistics(net.predictor.l1, {'std': np.std}))\n", "trainer.extend(extensions.PlotReport(['l1/W/data/std'], x_key='epoch', file_name='std.png'))\n", "trainer.extend(extensions.PlotReport(['main/loss', 'val/main/loss'], x_key='epoch', file_name='loss.png'))\n", "trainer.extend(extensions.PlotReport(['main/accuracy', 'val/main/accuracy'], x_key='epoch', file_name='accuracy.png'))\n", "trainer.extend(extensions.dump_graph('main/loss'))" ], "execution_count": 22, "outputs": [] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "D2tRnyVYMq4y" }, "source": [ "#### `LogReport`\n", "\n", "`epoch`や`iteration`ごとの`loss`, `accuracy`などを自動的に集計し,`log`というファイル名で保存します." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "-4cZiPrvUqfB" }, "source": [ "#### `snapshot`\n", "\n", "`Trainer`オブジェクトを指定されたタイミング(デフォルトでは1エポックごと)で保存します.`Trainer`オブジェクトは上述のように`Updater`を持っており,この中に`Optimizer`とモデルが保持されているため,この`Extension`でスナップショットをとっておけば,その時点から学習を再開させたり,学習済みモデルを使った推論などが可能になります." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "nomZePWnUsFT" }, "source": [ "#### `dump_graph`\n", "\n", "指定された`Variable`オブジェクトから辿れる計算グラフをGraphvizのdot形式で保存します.\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "d5DugCn3UthJ" }, "source": [ "#### `Evaluator`\n", "\n", "評価用のデータセットの`Iterator`と,学習に使うモデルのオブジェクトを渡しておくことで,学習中のモデルを指定されたタイミングで評価用データセットを用いて評価します.内部では,`chainer.config.using_config('train', False)`が自動的に行われます.`backprop_enable`を`False`にすることは行われないため,メモリ使用効率はデフォルトでは最適ではありませんが,基本的には`Evaluator`を使えば評価を行えるという点において問題はありません.\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "rbnF4Of8UvTZ" }, "source": [ "#### `PrintReport`\n", "\n", "`LogReport`と同様に集計された値を標準出力に出力します.この際,どの値を出力するかをリストの形で与えます.\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "IzRAhjcfUwl8" }, "source": [ "#### `PlotReport`\n", "\n", "引数のリストで指定された値の変遷を`matplotlib`ライブラリを使ってグラフに描画し,出力ディレクトリに`file_name`引数で指定されたファイル名で画像として保存します." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "Pmgkto2tUxyV" }, "source": [ "#### `ParameterStatistics`\n", "\n", "指定したレイヤ(Link)が持つパラメータの平均・分散・最小値・最大値などなどの統計情報を計算して,ログに保存します.パラメータが発散していないかなどをチェックするのに便利です.\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "YzFusGNSUzWF" }, "source": [ "---\n", "\n", "これらの`Extension`は,ここで紹介した以外にも,例えば`trigger`によって個別に作動するタイミングを指定できるなどのいくつかのオプションを持っており,より柔軟に組み合わせることができます.詳しくは公式のドキュメントを見てください.\n", "\n", "- [ChainerのTrainer extension一覧](http://docs.chainer.org/en/stable/reference/extensions.html)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "UENQI-q5Mq4z" }, "source": [ "### 学習の開始 (Trainer利用)\n", "\n", "学習を開始するために,`Trainer`オブジェクトのメソッド`run`を実行してください." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "h92kAz7-Mq4z", "outputId": "34669af1-4858-4192-842d-f4211bda7c87", "colab": { "base_uri": "https://localhost:8080/", "height": 215 } }, "source": [ "trainer.run()" ], "execution_count": 23, "outputs": [ { "output_type": "stream", "text": [ "epoch main/loss main/accuracy val/main/loss val/main/accuracy l1/W/data/std elapsed_time\n", "\u001b[J1 1.66917 0.599904 0.938911 0.806764 0.0359232 4.00874 \n", "\u001b[J2 0.673337 0.843211 0.519283 0.86699 0.0366054 6.59789 \n", "\u001b[J3 0.459913 0.878686 0.414855 0.887757 0.0370351 9.17739 \n", "\u001b[J4 0.38953 0.893262 0.370488 0.896855 0.037301 11.7382 \n", "\u001b[J5 0.353165 0.901215 0.342328 0.90447 0.03749 14.4128 \n", "\u001b[J6 0.33014 0.90609 0.32212 0.90981 0.037639 17.1353 \n", "\u001b[J7 0.312328 0.910906 0.30679 0.913172 0.0377671 19.834 \n", "\u001b[J8 0.298127 0.914704 0.295095 0.915744 0.0378811 22.4303 \n", "\u001b[J9 0.28583 0.917659 0.284156 0.918513 0.0379864 25.0918 \n", "\u001b[J10 0.275227 0.921096 0.274761 0.921677 0.0380852 27.7848 \n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "4N-T8yJIMq42" }, "source": [ "学習ループを自分で書いた場合よりも遥かに簡単に,同様の結果を得ることができました.さらに,`Extension`の機能を利用することで,様々なスコアや,学習曲線の可視化も自動で出力されます.\n", "\n", "では,保存されている損失のグラフを確認してみましょう." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "vGulNmkgMq43", "outputId": "04f94fac-26bd-4497-cb49-7326fb66a425", "colab": { "base_uri": "https://localhost:8080/", "height": 279 } }, "source": [ "from IPython.display import Image\n", "Image(filename='results/mnist_result/loss.png')" ], "execution_count": 24, "outputs": [ { "output_type": "execute_result", "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeoAAAEGCAYAAACq69bDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0\ndHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO3deVyVZf7/8dc5nMO+CCIuoAGaG0to\ngmuuleU0VpalWclYP7JsbJlppmmmppq+LdNMk6XlUKatWtqUNiWVJi1oouKuqSGo4JKoIDucw/n9\ncRRlXNgOnAO8n4/HecA55z7X/bkvePDmvq/7vm6DzWazISIiIi7J6OwCRERE5MIU1CIiIi5MQS0i\nIuLCFNQiIiIuTEEtIiLiwkzOWnFwcDDh4eHOWr1DFBcX4+Pj4+wyXIb6oyb1xxnqi5oa0x/Z2dnk\n5eU1av2VlZXk5ORQVlbWqHbEcTw9PQkLC8NsNp/zntOCOjw8nPXr1ztr9Q6RmprKyJEjnV2Gy1B/\n1KT+OEN9UVNj+mPAgAGNXn9OTg5+fn6Eh4djMBga3Z40js1m49ixY+Tk5BAREXHO+zr0LSLSxpSV\nldG+fXuFtIswGAy0b9/+gkc4FNQiIm2QQtq1XOznoaAWERFxYQpqERFpUdavX8/MmTPrtOz06dNJ\nS0sjMTGRJUuWNHFlTUNBLSIiFzT320xWZ9Y8y3x1Zh5zv810UkX2E+peeeWVOi37448/MmjQoCau\nqGm1mKB2xV8WEZHWLjYsgPs/2Fj993d1Zh73f7CR2LCARrWbnZ1N7969SUxMpGfPnkyZMoUVK1Yw\ndOhQLr30UtLT00lPT2fw4MH069ePIUOGsGvXLsB+1vx1110HwJNPPsm0adMYOXIkkZGRNQJ8586d\n9OzZEzc3txrrXrlyJf369SMmJoZp06ZRXl4OwKOPPkrfvn2JjY3l97//PQCLFy8mOjqayy67jOHD\nhzdqmxvKaZdn1dfpX5bZt/VjSPfg6l+W2bf1c3ZpIiIt1lOfbWfHwZMXXSbEz4M756XT0d+DIyfL\n6RHiy6wVe5i1Ys95l+/bxZ+//jqq1nX//PPPLF68mLfeeov4+Hg++OADfvjhB5YtW8azzz7LO++8\nw/fff4/JZGLFihU89thjfPzxx+e089NPP7Fq1SoKCwvp1asX9957L2azmeXLl3PNNdfUWLasrIzE\nxERWrlxJz549ufPOO3n99de54447+OSTT/jpp58wGAzk5+cD8PTTT/Pll18SGhpa/VpzazF71EO6\nBzP7tn7c+14GN85JY8b7GdWhLSIiTSfAy0xHfw9y88vo6O9BgNe5k3I0REREBDExMRiNRqKiohgz\nZgwGg4GYmBiys7MpKChg4sSJREdH89BDD7F9+/bztvOrX/0KDw8PgoODCQkJ4ciRIwB8+eWX5wT1\nrl27iIiIoGfPngBMnTqV7777joCAADw9Pbnrrrv4z3/+g7e3NwBDhw4lMTGRN954A6vV6pDtrq8W\ns0cN9rAe3jOYzzYfYkK/UIW0iEgj1WXP9/QRzJmje/De2v08cOWlDvn76+HhUf290Wisfm40GrFY\nLDz++OOMGjWKTz75hOzs7AtOEnN2O25ublgsFkpKSsjPz6dLly51qsVkMpGens7KlStZsmQJs2fP\n5ptvvmHu3LmsXbuWzz//nMsvv5wNGzbQvn37hm90A7SYPWqw/7L8sMc+TrJ82+FzxqxFRMSxzh5m\nfPjqXsy+rV+NMeumVFBQQGhoKAALFiyo12dXrVrFqFGjznm9V69eZGdn8/PPPwPw7rvvMmLECIqK\niigoKGDcuHH861//YvPmzQBkZmYycOBAnn76aTp06MCBAwcat1EN0GKC+vQvy5wp/enT2Z/uHXya\n7ZdFRKSt2pJTUGOY8fQw5JacgiZf9x/+8Af+9Kc/0a9fPywWS70+e77xabDPqT1//nwmTpxYfdh9\n+vTpFBYWct111xEbG8uwYcN46aWXAHjkkUeIiYkhOjqaIUOGcNlllzlk2+rDYLPZbM2+Vuyn19dn\nru+532YSGxbAkO7B/HXpNhZvyOHfd1zO9oMnmT6iexNWemGav7gm9UdN6o8z1Bc1NXau78beJ2Hn\nzp306dOnUW24uv79+7N27drz3uTCVV3o59Ji9qinj+he/R9dfEQQJRVW/D3NTgtpERFxXRkZGS0q\npC+mxQT12RLCgwBIzzru5EpERESaVosM6hB/T8Lbe5OeraAWEZHWrdagnjZtGiEhIURHR19wmdTU\nVOLi4oiKimLEiBEOLfBC4sODWJ99nKoqpwyxi4iINItagzoxMZGUlJQLvp+fn899993HsmXL2L59\nO4sXL3ZogReSEBHEiZJKfj5a1CzrExERcYZag3r48OEEBQVd8P0PPviACRMm0K1bNwBCQkIcV91F\n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\n9evHdddd5+xSnC4/P5+bb76Z3r1706dPH9asWePskpzqX//6F1FRUURHRzN58mTKysqcXVKzmjZt\nGiEhIURHR1e/dvz4ca666iouvfRSrrrqKk6cOOHECsXVKagbwGQy8c9//pMdO3bw448/MmfOHHbs\n2OHsspxq1qxZ9OnTx9lluIQHHniAa665hp9++onNmze36X7Jzc3llVdeYf369Wzbtg2r1cqiRYuc\nXVazSkxMJCUlpcZrzz//PGPGjGHPnj2MGTOG559/3knVSUugoG6Azp07079/fwD8/Pzo06cPubm5\nTq7KeXJycvj888+5++67nV2K0xUUFPDdd99x1113AeDu7k67du2cXJVzWSwWSktLsVgslJSU0KVL\nF2eX1KyGDx9OUFBQjdeWLl3K1KlTAZg6dSqffvqpM0qTFkJB3UjZ2dls3LiRgQMHOrsUp3nwwQf5\n+9//jtGoX6esrCw6dOjAb37zG/r168fdd99NcXGxs8tymtDQUH7/+9/TrVs3OnfuTEBAAFdffbWz\ny3K6I0eO0LlzZwA6derEkSNHnFyRuDL9ZW2EoqIibrrpJl5++WX8/f2dXY5T/Pe//yUkJETXhJ5i\nsVjIyMjg3nvvZePGjfj4+LTpw5onTpxg6dKlZGVlcfDgQYqLi3nvvfecXZZLMRgMGAwGZ5chLkxB\n3UCVlZXcdNNNTJkyhQkTJji7HKdJS0tj2bJlhIeHM2nSJL755htuv/12Z5flNGFhYYSFhVUfYbn5\n5pvJyMhwclXOs2LFCiIiIujQoQNms5kJEyawevVqZ5fldB07duTQoUMAHDp0iJCQECdXJK5MQd0A\nNpuNu+66iz59+vDwww87uxyneu6558jJySE7O5tFixYxevToNr3H1KlTJ7p27cquXbsAWLlyJX37\n9nVyVc7TrVs3fvzxR0pKSrDZbKxcubJNn1x32vjx43n77bcBePvtt7n++uudXJG4MgV1A6SlpfHu\nu+/yzTffEBcXR1xcHF988YWzyxIX8eqrrzJlyhRiY2PZtGkTjz32mLNLcpqBAwdy8803079/f2Ji\nYqiqqiIpKcnZZTWryZMnM3jwYHbt2kVYWBjz5s3j0Ucf5euvv+bSSy9lxYoVPProo84uU1yYphAV\nERFxYdqjFhERcWEKahERERemoBYREXFhCmoREREXpqAWERFxYQpqkQZITU3VncJEpFkoqEVERFyY\nglpatffee4+EhATi4uK45557sFqt+Pr68tBDDxEVFcWYMWM4evQoAJs2bWLQoEHExsZy4403Vt8j\n+Oeff+bKK6/ksssuo3///mRmZgL2ud5P33d6ypQpaEoCEWkKCmpptXbu3MmHH35IWloamzZtws3N\njffff5/i4mIGDBjA9u3bGTFiBE899RQAd955Jy+88AJbtmwhJiam+vUpU6YwY8YMNm/ezOrVq6vv\nerRx40ZefvllduzYwd69e0lLS3PatopI62VydgEiTWXlypVs2LCB+Ph4AEpLSwkJCcFoNHLrrbcC\ncPvttzNhwgQKCgrIz89nxIgRgP0ewRMnTqSwsJDc3FxuvPFGADw9PavbT0hIICwsDIC4uDiys7MZ\nNmxYc26iiLQBCmpptWw2G1OnTuW5556r8frf/va3Gs8beotBDw+P6u/d3NywWCwNakdE5GJ06Fta\nrTFjxrBkyRJ++eUXAI4fP86+ffuoqqpiyZIlAHzwwQcMGzaMgIAAAgMD+f777wF49913GTFiBH5+\nfoSFhfHpp58CUF5eTklJiXM2SETaJO1RS6vVt29fnnnmGa6++mqqqqowm83MmTMHHx8f0tPTeeaZ\nZwgJCeHDDz8E7LcbnD59OiUlJURGRjJ//nzAHtr33HMPTzzxBGazmcWLFztzs0SkjdHds6TN8fX1\npaioyNlliIjUiQ59i4iIuDDtUYuIiLgw7VGLiIi4MAW1iIiIC1NQi4iIuDAFtYiIiAtTUIuIiLiw\n/w/pzBvYtJrEuAAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": { "tags": [] }, "execution_count": 24 } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "WDR3LRzkMq46" }, "source": [ "精度のグラフも見てみましょう." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "eJmS70CGMq46", "outputId": "f402c920-749e-4033-a09f-33c9bdd33099", "colab": { "base_uri": "https://localhost:8080/", "height": 279 } }, "source": [ "Image(filename='results/mnist_result/accuracy.png')" ], "execution_count": 25, "outputs": [ { "output_type": "execute_result", "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "tags": [] }, "execution_count": 25 } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "sAG2GYmwMq48" }, "source": [ "もう少し学習を続ければ,さらに精度の向上が期待できそうです.\n", "\n", "最後に,`dump_graph`という`Extension`によって出力された計算グラフのファイルを,`Graphviz`で画像化してみましょう." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "6cznAWVbMq49", "colab": {} }, "source": [ "!dot -Tpng results/mnist_result/cg.dot -o results/mnist_result/cg.png" ], "execution_count": 26, "outputs": [] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "Eo0dsPW-Mq4_", "outputId": "0ffcf95c-323d-4748-8674-c35e7b657362", "colab": { "base_uri": "https://localhost:8080/", "height": 1000 } }, "source": [ "Image(filename='results/mnist_result/cg.png')" ], "execution_count": 27, "outputs": [ { "output_type": "execute_result", "data": { "image/png": "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\nyM/PR2BgoMl9NjY2KC8v58Sod5CQkIBnnnkGwI2hIkYSiQT3338/pk+fjl27dqGoqAi+vr5YvXo1\nVq1a1e5vTUREHWOQQURERANSS0sLnn32WWzduvW2PS8kEgkmTJiAr7/+esD+cA8KCkJubi4MBgNs\nbGwwZ84cfPPNN2KXZZY0Gg2eeuop7Nix47aTzFpbW8Pd3R0xMTGIiYlBREQErKys+rhSIiLLxqEl\nRERENCDZ2dlBqVTecRudToesrCyEhoYiPz+/jyozL3FxccJ8IgaDQVg5g0ydP38ekyZNwq5du+64\nUo6VlRX+8pe/4L333kNkZCRDDCKie8AeGURERDQgZWdnIyQkpFPbSiQS2NvbY//+/XjggQd6tzAz\nc/HiRXh6esJgMMDOzg5Xr16Fo6Oj2GWZlcOHD2PlypXQaDTQarV33Nba2hqzZs3C0aNH+6g6IqL+\nhz0yiIiIaED697//LfQ0uBudToeGhgbMnTsXO3bs6OXKzMvYsWMxbdo0AMCiRYsYYtzEYDDgrbfe\nwoIFC9DY2HjXEAO4MaHsDz/8gMrKyj6okIiof2KPDCIiIhpwNBoNRo0ahdra2rtua2VlJXT/N86l\nIZPJIJPJerVGc3L+/HmcPXsW06dPx3333Sd2OWZBq9Xi9OnTKC8vh5WVFSQSCXQ63R2Hldxs06ZN\nwoSgRETUNRKxCyAiIiLqa4MGDcLVq1dRX18PjUaD5uZmNDY2QqlU4vHHH4erpwJWVlYwGAwwtOlg\nMOhh0LdBr2+DwdCGX640oUZbjkFDRoj9UvpEm84dNhI7lDcNQ8X59iu8DDwG1F25AE3TjWBr9erV\nANCpHhlG169f75XKiIgGAvbIICIiIvqPU6dOITw8HKveOIchw8aIXY5ZKT57EF6TosUuw6xcKc7A\ngXceQmlpKcaOHSt2OUREAwbnyCAiIiKiu2KIQURE5oJBBhERERERERFZDAYZRERERERERGQxGGQQ\nERERERERkcVgkEFEREREREREFoNBBhERERERERFZDAYZRERERERERGQxGGQQERERERERkcVgkEFE\nREREREREFoNBBhERERERERFZDAYZRERERERERGQxGGQQERERERERkcVgkEFEREREREREFoNBBhER\nERERERFZDInYBRARERFZquLMg0jf+yrqq0sBAIMdXTE64AE88NiW2z7nkuoIjm19CrMe24KxwfP6\n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\nyKCBjUEGEZE4OLSEiIiIiIiIiCwGgwwiIiIiIiIishgMMoiIiIiIjeZf/wAAIABJREFUiIjIYjDI\nICIiIiIiIiKLwSCDiIiIiIiIiCwGgwwiIiIiIiIishgMMoiIiIiIiIjIYjDIICIiIiIiIiKLwSCD\niIiIiIiIiCwGgwwiIiIiIiIishgMMoiIiIiIiIjIYjDIICIiIiIiIiKLwSCDiIiIiIiIiCwGgwwi\nIiIiIiIishgMMoiIiIiIiIjIYjDIICIiIiIiIiKLwSCDiIiIiIiIiCyGROwCiIiIiMxN6u6XIJEO\nErsMMnMtTTVil0BENCAxyCAiIiL6j+HDh2P58uVil2F2GhsbUVBQgKCgINja2opdjhlxB4KXw97e\nXuxCiIgGFCuDwWAQuwgiIiIiMl+nTp1CeHg4SktLMXbsWLHLISKiAY5zZBARERERERGRxWCQQURE\nREREREQWg0EGEREREREREVkMBhlEREREREREZDEYZBARERERERGRxWCQQUREREREREQWg0EGERER\nEREREVkMBhlEREREREREZDEYZBARERERERGRxWCQQUREREREREQWg0EGEREREREREVkMBhlERERE\nREREZDEYZBARERERERGRxWCQQUREREREREQWg0EGEREREREREVkMBhlEREREREREZDEYZBARERER\nERGRxWCQQUREREREREQWg0EGEREREREREVkMBhlEREREREREZDEYZBARERERERGRxWCQQURERERE\nREQWg0EGEREREREREVkMBhlEREREREREZDEYZBARERERERGRxWCQQUREREREREQWg0EGERERERER\nEVkMBhlEREREREREZDEYZBARERERERGRxWCQQUREREREREQWg0EGEREREREREVkMBhlERERERPT/\n2LvzsCjve///L5YRBAVcwB0RARFm0DCgErSmBrMY9STRmGjUJG1sE49Zarbml37TpK1XzTfmxHpO\noibGr0mumOU0SZM0y4ltjIobArLJ6gImggvuIMsMzO8Pz0wdQQOIDgPPx3VxXe0999z3G2fuT25e\n92cBALfh7eoCAAAA0HHU1NTo3Xffddq2f/9+SdL69evVu3dvx3ZPT0/98pe/lIeHxzWtEQDQtXnY\nbDabq4sAAABAxxEVFaW9e/fK2/v8M68LbxftoYXVatXEiRO1ceNGl9QIAOi6GFoCAAAAJ3PnzpW3\nt7csFossFousVqvjx77N09NT9957r6tLBQB0QfTIAAAAgJN9+/YpMjJSl7tN9Pb21pEjR5yGmgAA\ncC3QIwMAAABOhg8frlGjRl1y7gsvLy/dcssthBgAAJcgyAAAAEAT8+fPl5eXV7OvNTY2au7cude4\nIgAAzmNoCQAAAJqoqKjQ4MGD1djY2OQ1X19fVVZWyt/f3wWVAQC6OnpkAAAAoIkBAwYoOTlZnp7O\nt4sGg0F33nknIQYAwGUIMgAAANCsefPmNdlmsVhYrQQA4FIMLQEAAECzTp48qX79+slisTi2BQQE\n6NixY+rWrZsLKwMAdGX0yAAAAECzevXqpZtuuskx6afBYNDs2bMJMQAALkWQAQAAgEuaO3euY8JP\ni8WiOXPmuLgiAEBXx9ASAAAAXFJ1dbWCg4NVU1Oj/v3769ChQ00mAAUA4Friv0IAAAC4JH9/f91+\n++2Szk/+SYgBAHA1emQAAAC0o9raWmVnZys9Pd3xU1BQoIaGBleX1uUZDAYZjUYlJCQ4fkwmkwwG\ng6tLAwC0AkEGAABAG9XX1ysnJ0fp6enKyMjQrl27lJ+fL4vFosDAQBmNRsXFxSk6Olre3t6uLrfN\nGhoatHz5cj3xxBOuLuWK1NbWqqCgQLm5udqzZ4+qqqrk4+OjuLg4p3AjJibGrT8vAOjsCDIAAABa\nwGq1qqioSBkZGcrIyFB6eroyMzNVW1srf39/xcTEyGg0ymg0ymQyKSIiolMNwygtLVVYWJiry2hX\nR44cUW5urlMIde7cORkMBkVGRspsNjt+xowZw2otANBBEGQAAABcpKGhQYWFhU6hRVZWls6dOyc/\nPz/FxsZ26tCiq2poaNC+ffuUm5urvLw8x09NTY38/f01atQoJSQkOMKNkSNH8rkDgAsQZAAAgC6v\nvLxcGRkZ2rp1q1JTU5WVlaXq6moZDAaFhYXJZDI5QovRo0czp0IXYrVatX//fqdwIycnR3V1derZ\ns6dMJhPhBgBcYwQZAACgS7GHFvaeFtu3b9eJEydkMBg0bNgwp54Wo0aNYjgBmmgu3MjOzlZ9fb0C\nAgJkMpmchqXExMTIw8PD1WUDQKdBkAEAADqti0OLHTt26Pjx4/L29lZ4eLhTaBEXFycfHx9Xlww3\n1Vy4kZWVJYvF0my4ERsb6+qSAcBtEWQAAIBO4eLQYufOnaqsrJSXl5eGDx/uFFqYTCb5+vq6umR0\ncvZww74Mb25urvbt26fGxkbHqjb2YGP8+PEKDw93dckA4BYIMgAAgNu5MLTIyMhQWlqajh49Kkka\nOnSozGazI7QwGo3q3r27iysGzquurlZ+fr5Tz429e/eqsbFR/fv3d5pvIzExUf3793d1yQDQ4RBk\nAACADu3UqVPKy8tzmoyzoqJCktSvXz+nwCIxMVGBgYEurhhonebCjZKSEtlstibhxtixYxUSEuLq\nkgHApQgyAABAh3H69Gnl5uY6DREpKCiQ1DS0MJvN6tWrl4srBq6OqqoqFRQUtCjcSEpKUt++fV1d\nMgBcMwQZAADAJc6cOaOcnByn0KKwsFA2m61JaBEfH6/evXu7umTApc6ePavCwkKncKO4uFiSmoQb\nycnJXDMAOi2CDAAAcNWdPXtW2dnZLQotrrvuOvXp08fVJQNuwd6LyT6ZaG5urmO+mAEDBjhNJpqU\nlCR/f38XVwwAV44gAwAAtKuqqiplZWU5hRZFRUVqbGxsElqMGjVKwcHBri4Z6FSOHDni6LWRm5ur\nnJwcHTt2TF5eXoqKinLquREfHy8/Pz9XlwwArUKQAQAA2s3vfvc7LV26VA0NDerbt69jqVOTyaS4\nuDj169fP1SUCXdKhQ4eUk5OjnJwc5eXlKScnR6dPn5a3t7f+4z/+Q4888oirSwSAFvN2dQEAAKDz\nOHHihKKjo/Xmm29q4MCBri4HwP8aNGiQBg0apFtvvdWxraysTLNnz9bJkyddWBkAtJ6nqwsAAACd\nS2BgICEG4AaGDh3KsBIAbokgAwAA4CKpqal66aWXnLY1Njbqrbfe0p133tnse/7yl78oJSVFsbGx\nioyM1MSJE/XnP/9Z1dXVTfb97LPPNH36dMXGxur666/Xk08+qWPHjl1RzT9VnyTt2rVLM2bMUHR0\ntBITE7V06VLV19e3er8NGzZo5cqVamhouKKa6+vr9eKLLyohIUHR0dG69957FR8fr7CwML333ntX\ndOyWWrlypSZNmqQRI0Zo5MiRmjRpkl555RVVVVU57deazxcAcHURZAAAAFzg1Vdf1bp167Ro0SLH\ntgMHDmjWrFn64x//qJqammbft23bNt13333aunWrsrKy9NRTT+mtt97SwoULnfb7+9//rscee0xT\npkzRjh07tGbNGqWlpem+++6T1WptU80tqa+4uFjz5s1TcnKyMjMztXr1an300Ud67rnnWr3f5MmT\n5ePjozlz5ujMmTNtqlmS3nzzTX3//ff67rvv9Pzzz+vee+/VJ5980ubjtcWuXbs0e/Zsbd++Xenp\n6XriiSe0cuVKPfzww077tfTzBQBcfQQZAAAA/2vlypX6/PPP9dprrzmWqSwoKNBLL72kuXPnKiYm\n5pLv9ff315w5cxQUFCR/f39NnTpVt9xyizZt2qSKigrHfu+995769eunX//61+rZs6diYmL04IMP\nKj8/X1lZWa2uuaX1rVixQsHBwfrNb34jPz8/xcfH66GHHtJf//pX7du3r9X7/eIXv1BMTIzuv//+\nNgcw3377reLi4hQQEKA5c+ZoypQpbTpOS9XW1jbpsWIwGDR//nz17t1b/v7+uu2223TzzTdry5Yt\njmVMpZZ/vgCAq48gAwAAQFJpaaleeeUVLV68WD4+Po7tI0eO1KpVq3T77berW7dul3z/2rVr5eXl\n5bStV69ekuTUS6KiokIhISHy8PBwbBswYICk8ytLtFZL6rNardq4caPGjh3rdN4bbrhBNptN3377\nbav2s3v88ceVn5+vtWvXtrpu6fy/hbf3tZt7/sMPP9Tx48edtq1evdrp85bkWF3nwmEjLf18AQBX\nH0EGAACApHXr1slmsyklJaXdjnn48GH5+vpqyJAhjm1DhgxRZWWl0372+TFCQ0Pb7dwX+uGHH1Rd\nXa1BgwY5bR86dKgkqbCwsFX72QUGBmrs2LFau3atbDZbi+vZsmWLJk6cqKNHj+rjjz9WWFjYZXuT\n2Gw2rVmzRjfeeKMiIyMVFxenBQsWOPUQkaS0tDSlpKTIaDQqKipKN998szZv3ixJ+sMf/qA//elP\nKisrU1hYmCZOnHjJ85WWliogIECDBw++7O/R3OcLALj6CDIAAAAkfffddwoPD1f37t3b5Xg1NTXa\ntm2bZs+eLYPB4Ni+aNEiHTt2TOvWrVN1dbWKi4u1du1a/exnP9N1113XLue+mD0osQ+XsfPx8ZGv\nr68jWGnpfheKjY3V4cOHVVBQ0OJ6JkyYoE2bNqlv376aMWOGSktLlZ+ff8n9ly9frpdeekmLFi1S\nZmamPvroI1VUVOiuu+5yqqmyslJTp07V1q1blZaWJj8/Pz322GOSpOeff14pKSkaOnSoSktLtWnT\nJqdzWK1WHT58WG+//bZSU1P14osvOn1uF7vU5wsAuPoIMgAAQJd37tw5/fDDD46eB+3htddeU0hI\n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\n5mkAuGJ79+7Viy++qLCwMEVERGjx4sWaPHmyMjMzlZeXp2eeeYYSAwAAtDjuRgcA0Hj18zQSExNV\nXFyslStXKi0tTRMmTFCvXr00e/Zs/fznP1doaKjRUQG0UAcOHNDq1auVlpamDRs2qEePHpo+fboW\nLlyo0aNHy8XFxeiIAAAAl8TWEqAVqJ+nsWTJEu3bt0+xsbFKTk5WUlIS8zTaILaW4HzHjh3TZ599\npqVLl+o///mP/P39NXnyZCUmJurWW2+VuzufawAAAPOgyABakfPnaVRXV+vmm29WYmIi8zTaEIoM\nSNKJEyf0j3/8Q2lpafr3v/8td3d3TZ48WcnJybrlllvk4eFhdEQAAIArwowMoBU5d55GSUmJ3n//\nfUnS3XffrR49ejBPA2jlqqqqtGbNGqWkpKhHjx667777JEkLFy5UaWmpVq5cqYSEBEoMAABgaqwl\nBVqpdu3aOeZpFBUVKS0tTampqZowYYJ69+6tpKQk3X333QzyA0zOZrPpq6++Umpqqj7++GOdOXNG\nI0eO1CuvvKJZs2bJz8/P6IgAAABNihUZQBvQvXt3PfbYY8rMzFRubq6SkpKUmpqq0NBQDRs2TAsW\nLNCRI0eMjgmgkerq6pSenq7HHntM3bp104QJE5Sfn6/nnntOhw4dUnp6uu677z5KDAAA0CoxIwNo\no86dp7Fs2TJZrVZNmDBBKSkpuv3221l6bmLMyGi98vLytHTpUqWmpqq4uFjh4eFKTExUSkqK+vXr\nZ3Q8AACAZsGKDKCNOneeRmlpqZYuXSpJmj17tgIDA5mnAbQQeXl5euaZZxQaGqqIiAitXLlSKSkp\nKigocNxGiQEAANoSZmQAcJqncejQIX344YdasmSJJkyYoODgYN1xxx265557NGDAAKOjAm3C/v37\n9fHHHys1NVVbtmxRr169NG3aNL333nuKi4szOh4AAICh2FoC4KLql7EvWbJEhw8fVmxsrJKTkzVn\nzhx16dLF6Hi4CLaWmFN9iZiWlqaNGzeqU6dOuu2225SSkqLx48fLxcXF6IgAAAAtAkUGgJ9UV1en\ndevWKTU1VR999BHzNFqQNWvWqLi42OnY7373O40dO1Y333yz0/EJEyaob9++zRkPP6GsrExr1qxR\nWlqaPv/8c7Vv314JCQlKTEzUxIkTZbFYjI4IAADQ4lBkALgslZWV+vTTT5Wamqp//etf8vX1VWJi\nopKTkzV69Gg+NW5mTz31lJ577jm5u7s7vvf1P9br/26z2SRJRUVFCgwMNCYoHM79N/TFF1/I1dVV\n8fHxSkxM1IwZM+Tt7W10RAAAgBaNIgPAFatfCr948WJlZWVp4MCBuuOOO5ScnKz+/fsbHa9NKCgo\n0KBBgy55jpubm2666SZ9+eWXzZQK56uurtYXX3yhtLQ0rV69WlVVVRo7dqySk5M1bdo0dejQweiI\nAAAApkGRAaBJ1M/TWLx4sUpKShzzNO6880517tzZ6HitWkREhPLz8y96hRk3NzctWrRIc+fObeZk\nbZvNZtN3332npUuXavny5SovL9eoUaOUmJio2bNnq2vXrkZHBAAAMCWKDABNymaz6auvvlJqaqpW\nr16t2tpaxzyNqVOnXvae/6+//lo33XTTtQnbSrz00kt68sknVVtb2+DtFotFR44ckZ+fXzMnM6+S\nkpIr2oZTV1enjRs3Ki0tTStWrFBJSYnCw8OVkpKilJQUdevW7RqkBQAAaFtcjQ4AoHVxc3NTfHy8\nUlNTVVRUpHfeeUdVVVWaNWuWAgMDdf/99ys9Pf2iqwfOlZWVpXHjxunZZ59t1PltVVJSkmMOxvnc\n3d01adIkSozLsHDhQkVGRqqqqqrRX5OXl6dnnnlGISEhGjNmjL788ks98MADKiwsVF5enp544glK\nDAAAgCbCigwAzeLgwYNatWqV/va3v2nbtm0KCwvTrFmzlJKSon79+jX4Nb/61a+0YMEC2e12TZky\nRe+//758fHyaObk5XH/99dq0aZPq6uqcjru4uCgtLU3Tp083KJl5VFdX65FHHtG7774rFxcXrVq1\nStOmTbvo+du3b9eKFSu0fPly7dixQ8HBwbr99ts1d+5cxcTENGNyAACAtoUiA0CzO3eexpEjRxxz\nA86dp2Gz2RQUFKSjR49KOruyICQkRJ999hmXEG3Am2++qUceeeSClRne3t46evSo2rVrZ1Aycygq\nKtLtt9+urKws1dbWyt3dXbfffrs+/PBDp/MOHDig1atXKy0tTRs2bFCPHj00ffp0JSYmctUeAACA\nZkKRAcAw587TWLVqlerq6hQfH6+UlBS1a9dOCQkJTudbLBZ5e3tr9erVGjdunEGpW6ajR48qKCjI\nqciwWCxKSkrSkiVLDEzW8qWnp2vatGk6efKkrFar47iHh4eOHDkiq9WqVatWKTU1VRs3bpS/v78m\n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\nAGA6+/bt01/+8hc9/vjj8vT0dBwfNGiQ3nrrLU2dOlUeHh4X/fr33ntPbm5uTsc6duwoSU6rJIqL\nixUQECAXFxfHsW7dukmSDh06dNm5G5OvtrZWX331lUaMGOH0uDfddJPsdru++OKLyzqv3i9/+Uvl\n5+frvffeu+zc0tnvhbt7841VWrFihY4dO+Z07O2333Z6vSUpMDBQkpy2jTT29QUAAIA5UWQAMJ3F\nixfLbrcrPj6+ye7z8OHD8vLyUq9evRzHevXqpaNHjzqdVz8fo3fv3k322Oc6cOCAKioq1KNHD6fj\nwcHBkqSCgoLLOq+en5+fRowYoffee0+Xc7Gq9evX68Ybb1RpaalWrVqlPn36XHI1id1u18KFCzV+\n/HiFhIQoKipK9957r9MKEUnavHmz4uPjFRERodDQUN1yyy369ttvJUm///3v9Yc//EH79+9Xnz59\ndOONN1708fbt2ydfX1/17Nnzks+jodcXAAAA5kSRAcB01q1bp379+qldu3ZNcn+VlZXauHGjkpKS\nZLFYHMcffvhhHTlyRIsXL1ZFRYUKCwv13nvv6YYbbtDQoUOb5LHPV1+UnH8JXE9PT3l5eTmKlcae\nd67Bgwfr8OHD2r59e6PzjBkzRt988426dOmi6dOna9++fcrPz7/o+a+++qpefPFFPfzww9qyZYtW\nrlyp4uJiJSYmOmU6evSoJk+erA0bNmjz5s3y9vbWY489Jkl66qmnFB8fr+DgYO3bt0/ffPON02PU\n1tbq8OHDWrJkidLT0/Xss886vW7nu9jrCwAAAHOiyABgKmfOnNGBAwccKw+awuuvv66AgADNnz/f\n6fiIESP04IMP6plnntHgwYN18803q6Ki4oKrpDSl6upqSbpga4Qkubu7q6qq6rLOO1ffvn0lXbha\no6lUVVVp4cKFmjhxoqZNm6YOHTooLCxMzz//vI4fP65ly5Y5zr3tttv0y1/+Un5+fvL399eECRNU\nVlam48eP/+TjjBw5UiNHjtSrr76q3/3ud0pISLjk+Rd7fQEAAGBOFBkATOXYsWOy2+3y8vJqkvv7\n/PPP9dlnn2np0qUXrG7485//rGXLlmnZsmXKz8/X+vXrFRsbq5/97GfXbGhk/QyIhoZyWq1Wx/Nu\n7Hnnql/B0tBqjaZQWFioiooKRUVFOR0fMmSILBbLJQek1s/faMxlYr///ntt2bJFr732mlatWqXb\nbrvtgnka9S71+gIAAMCcKDIAmEr9SoTzhz5eiTVr1ujNN9/U8uXLL5ixUFpaqrfeekuzZ8/W9ddf\nL29vb/Xq1UsvvPCCSkpK9Pbbb1/14zeka9eukqTy8nKn45WVlaqurlZAQMBlnXeu+u9Z/fewqdVf\n3rWhwsDX19cp67p16zRr1izFxMQoJCREf/rTnxr9OO7u7urUqZPGjBmj//3f/1VhYaFef/31C867\n1OsLAAAA86LIAGAq9SsNGvPJ/aUsXrxYH330kZYtW+a48sW59u3bJ5vNdsFt7du3l7+/vwoLC6/q\n8S+mV69e8vHxueCqKPv375ckhYWFXdZ557JarZLUZKtZzufr6yvpwnJFOlty1F/xpaioSPfdd5+6\ndu2qjz/+WLm5ufrtb397RY/Zp08fubm5XfB6/NTrCwAAAPOiyABgKp07d5aLi4tOnz59RV9vt9v1\nwgsvaMeOHXrnnXcuut0gKChI0tmVGeeqqKjQiRMnHG/Km5q7u7vGjh2rTZs2qa6uznH8q6++kouL\niyZMmHBZ552r/nvWpUuXa5J94MCB8vHxUXZ2ttPxrKwsWa1WRUZGSjo7o6O2tlYpKSnq3bu3PD09\nnS4h25CysjI9+uijFxyvL5zqX4/Gvr4AAAAwL4oMAKbSrl079e7d+4pnVOzcuVNvvfWWPvjgAw0Y\nMEB9+vRx+vPOO+9IOrviYdSoUfrggw+0efNmVVVVqbi4WL/73e8kSbNmzXLc58MPP6zY2Fjl5uZe\n/ROU9Oijj+ro0aN65ZVXdObMGW3ZskXvvPOOZsyYoX79+l32efXqv2f1qzWaOrenp6fuvfdeff75\n5/roo49UXl6ugoICPfnkkwoICNDs2bMlSd27d5ckpaenq7q6Wnv37r1gfoa/v79KSkp08OBBVVRU\nyMPDQ+vXr9fGjRtVXl6u2tpa5eXl6fHHH5e3t7fuueceSY1/fQEAAGBeFBkATGfcuHEqLCy84Moc\nW7du1YwZM3TdddcpKytL27dv1/DhwzV9+nRt3rxZ0tlP7BvDxcVFb7zxhhISEvSb3/xGUVFRio+P\nV1FRkd566y1dd911jnOtVquOHTumtWvXXvI+G5NPkkJDQ7V06VJ9++23io6O1gMPPKCZM2fq+eef\nd7q/xp5XLzs7W0FBQY4iozG5Dx06pEmTJuno0aP65JNPNHnyZP3rX//SwoULNWPGDEnS888/rwce\n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\nMTNiLQJiXhC7lFHpwOuB+MOml7BhwwaxSyEiIiKiMYBLS4iIiIiIiIjIaDDIICIiIiIiIiKjwSCD\niIiIiIiIiIwGgwwiIiIiIiIiMhoMMoiIiIiIiIjIaDDIICIiIiIiIiKjwSCDiIiIiIiIiIwGgwwi\nIiIiIiIiMhoMMoiIiIiIiIjIaDDIICIiIiIiIiKjwSCDiIiIiIiIiIwGgwwiIiIiIiIiMhoMMoiI\niIiIiIjIaDDIICIiIiIiIiKjwSCDiIiIiIiIiIwGgwwiIiIiIiIiMhoMMoiIiIiIiIjIaEjELoCI\naCxQZe1HfUWu2GWMSu0tV8UugYiIiIjGEAYZRER36OGHFqOhoUHsMgSFhYVwdHSEs7Oz2KUAAMJm\nPQhfX1+xyyAiIiKiMcJEp9PpxC6CiIiGjpubG1588UVs2LBB7FKIiIiIiIYce2QQERERERERkdFg\nkEFERERERERERoNBBhEREREREREZDQYZRERERERERGQ0GGQQERERERERkdFgkEFERERERERERoNB\nBhEREREREREZDQYZRERERERERGQ0GGQQERERERERkdFgkEFERERERERERoNBBhEREREREREZDQYZ\nRERERERERGQ0GGQQERERERERkdFgkEFERERERERERoNBBhEREREREREZDQYZRERERERERGQ0GGQQ\nERERERERkdFgkEFERERERERERoNBBhEREREREREZDQYZRERERERERGQ0GGQQERERERERkdFgkEFE\nRERERERERoNBBhEREREREREZDQYZRERERERERGQ0GGQQERERERERkdFgkEFERERERERERoNBBhER\nEREREREZDQYZRERERERERGQ0GGQQERERERERkdFgkEFERERERERERoNBBhEREREREREZDQYZRERE\nRERERGQ0JGIXQEREt+/w4cOoqakxuK21tRWZmZlISkoyuD02NhYeHh4jWR4RERER0ZAz0el0OrGL\nICKi2/P666/jj3/8IyQSCUxMTAAA+mFd/2etVgsAqK6uhrOzsziFEhERERENES4tISIyYitWrAAA\naDQaqNVqqNVqaDQagz+bmJjgnnvuYYhBRERERGMCgwwiIiPm5+cHmUwmzL64mdWrV49QRURERERE\nw4tBBhGRkUtISICZmdlN7zc1NcXDDz88ghUREREREQ0fBhlEREbu8ccfF/pg3EgikeDBBx/EpEmT\n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\nYr2L3NxctW7dWgMGDFBYWJgGDRokd3d3o2OiBpw4cUKrV69WUlKSfvzxRxUVFSkgIEAxMTGKjo5W\nWFgYU1Bw1SgyAACAYZgigrrIbDZr//79vzslpX///urXr5/d3PY3JydHK1euVFxcnFatWqXy8nJ1\n6dJFkZGRioyMVGBgIF9Y67iSkhJt3LhRiYmJWrFihXJzc9W0aVMNHz5cMTExGj58uDw9PY2OCTtA\nkQEAAGpEVaeIdO3aVT169OC2iqhTfjslJSMjQ8ePH6/VU1IsFouysrIUFxenuLg4bdq0SW5uburb\nt68iIyMVFRWlZs2aGR0TtdiePXsqpqBkZmbK2dlZYWFhiomJ0ejRo+Xj42N0RNRSFBkAAKDaXc0U\nkZCQEDVo0MDoyECtUxunpJw+fVoJCQlKSEjQ0qVLdezYMfn4+Kh///6KiIjQwIED5eTkVCNZcHM5\ndeqUkpOTlZSUpDVr1qigoED+/v4Vd0EZNGgQBTcqUGQAAIBq8/bbb2vZsmXKzMxUUVGR3N3d1a1b\nNwUFBSkoKEjdu3dXixYtjI4J2CWz2aydO3cqKytLWVlZ2rJli/bt2yebzaY2bdqob9+++r//+z91\n79692s/93Xff6e9//7vS0tIkSSEhIRo8eLCioqLUtm3baj8f6rbS0lKlp6crMTFRycnJOnTokJo0\naaLo6GjNmjWL9ZFAkQEAAKpPSEiIysrKNH78eAUFBal9+/bcRQS4gQoKCiqKjXfeeUcLFizQhAkT\nqv0806dP18KFC/XCCy9o4MCBfJFEjdq1a5e+/PJLzZ8/Xzk5OfL19TU6Egxm/OQ6AABwU+nbt6/G\njh2rTp06UWIAN5inp6fCw8P15z//+YYPu7/lllsUExNDiYEa16lTJ8XGxhodA7UIRQYAAMD/pKam\n6o033qi0zWq1at68ebrjjjsu+ZxZs2YpKipKXbp0Ufv27TVw4EC9/vrrKioqumjfZcuWKTY2Vl26\ndFG/fv00ffp0HT9+/Loy/14+SdqwYYPuvPNOderUSSEhIZo5c6bKysoqHl+1apVmz54ti8VyXVnK\nysr08ssvq1evXurUqZPuvfde9ezZU35+fvrss8+u69hVNXv2bEVERKhjx47q3LmzIiIi9NZbb6mw\nsLDSflfzuaF2M/q6rY7rJzk5WYGBgUpISLjmY/wa1wFudhQZAAAAkt555x19/PHHevTRRyu2HThw\n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\n9/n3PjfUTrX5ur3R18/14DrAzYQiAwAA1FmNGzeWg4ODCgoKrun5NptNM2fO1O7duzVnzpzLDsdu\n0aKFpPN/4f21oqIinTlzpuLLe3VzdHTU4MGDtX79elmt1ortycnJcnBw0JAhQy56zoX3okmTJjck\nU8eOHeXu7q6tW7dW2p6VlaXy8nJ17dpV0vk1BsxmsyZOnCgfHx+5uLhUugXmpZw+fVp/+ctfLtp+\n4Qvphfe5qp8baqfafN3e6OunKrgOUBdQZAAAgDrL1dVVPj4+17xGxU8//aQPPvhAn3/+uW699Vb5\n+flV+jdnzhxJ50dG9O3bV59//rkyMjJUUlKi3NxcPffcc5Kke+65p+KYjz76qIKDg7V9+/brf4GS\n/vKXv+jEiRN65513dO7cOW3atElz5szRmDFj1LZt24v2v/BeXBitUd15XFxcNGXKFK1YsUJLlixR\nYWGhdu3apeeff17NmjXT+PHjJUm33HKLJCk1NVWlpaU6cODARetnNGzYUHl5eTp8+LCKiork7Oys\nlJQUrV27VoWFhTKbzdqxY4emTZsmNzc3Pfjgg5Kq/rmhdqqN1+0FN/r6uRSuA9RFFBkAAKBOi4iI\n0J49ey66g8fmzZs1ZswY9e7dW1lZWdq5c6dCQkJ05513KiMjQ9L5v2hWhYODg/79738rJiZGTz/9\ntLp166aoqCgdPXpUH3zwgXr37l2xb3l5uU6ePKlVq1Zd8ZhVySdJHTp00Keffqo1a9YoKChIDz/8\nsO6++2699tprlzzu1q1b1aJFi4ovYlXJc+TIEY0aNUonTpzQsmXLFB0dre+//15z587VmDFjJEmv\nvfaaHn74YUnSY489pqefflrvvfeegoKCdM8996h169b64osv5ObmJun8F8GpU6fqk08+UUhIiN58\n802FhoZKksaMGaPc3FxNmDBBjRs3VlRUlCZPnqzi4mL16tVLzzzzjPr06aOAgAA98sgjat26tZYs\nWaKOHTtKqvrnhtqrtl23F1zL9bNgwQLFxsZKkmbOnKkpU6bo008/1bx58yRJw4cP188//6zPP/9c\nr776qiRp4sSJOnDggCRxHaBOcrDxEwwAAKpJSEiIgoODK/5iaQ9ycnIUFRWlf/zjHxo9erTRcWS1\nWjV27FiNGTNGd999d42e+/Tp0woNDdX06dM1ZcoUw/Pg6nTo0EHz5s3ThAkTqv3Y06dPV1JSkpYs\n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\n", "text/plain": [ "" ] }, "metadata": { "tags": [] }, "execution_count": 27 } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "afca_9ZgMq5B" }, "source": [ "データやパラメータが関数に次々と渡され,損失が出力されるまでの一連の計算過程が確認できます." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "VKGpB55MMq5B" }, "source": [ "### テストデータ評価\n", "\n", "Validationデータに対する評価を学習中に行うために使用されるEvaluatorは,Trainerと関係なく独立して使うこともできます.以下のようにして`Iterator`とネットワークのオブジェクト(`net`),使用するデバイスIDを渡してEvaluatorオブジェクトを作成し,これを関数として実行するだけです." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "0VPMBv5uMq5C", "outputId": "9d7ec862-ef14-4373-ad43-c9df12ac690f", "colab": { "base_uri": "https://localhost:8080/", "height": 35 } }, "source": [ "test_evaluator = extensions.Evaluator(test_iter, net, device=gpu_id)\n", "results = test_evaluator()\n", "print('Test accuracy:', results['main/accuracy'])" ], "execution_count": 28, "outputs": [ { "output_type": "stream", "text": [ "Test accuracy: 0.9250395\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "S3wF6tp-Mq5F" }, "source": [ "### 学習済みモデルで推論する\n", "\n", "それでは,Trainer Extensionのsnapshotが保存した学習済みパラメータを読み込んで,以前と同様に1番目のテストデータで推論を行ってみましょう.\n", "\n", "ここで一点注意が必要ですが,snapshotが保存するnpzファイルはTrainer全体のスナップショットとなっており,学習の再開に必要となるextensionの内部のパラメータなども一緒に保存されています.しかし,今回はネットワークのパラメータだけを読み込めば良いので, `serializers.load_npz()` の`path`引数にネットワーク部分までのパスを指定します.こうすることで,ネットワークのオブジェクトにパラメータだけを読み込ませることができます." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "c75UL_8XMq5H", "outputId": "6ca63d12-52e0-43b0-f877-0677c4770a93", "colab": { "base_uri": "https://localhost:8080/", "height": 283 } }, "source": [ "reset_seed(0)\n", "\n", "infer_net = MLP()\n", "serializers.load_npz(\n", " 'results/mnist_result/snapshot_epoch-10',\n", " infer_net, path='updater/model:main/predictor/')\n", "\n", "if gpu_id >= 0:\n", " infer_net.to_gpu(gpu_id)\n", "\n", "x, t = test[0]\n", "plt.imshow(x.reshape(28, 28), cmap='gray')\n", "plt.show()\n", "\n", "x = infer_net.xp.asarray(x[None, ...])\n", "with chainer.using_config('train', False), chainer.using_config('enable_backprop', False):\n", " y = infer_net(x)\n", "y = to_cpu(y.array)\n", "\n", "print('予測ラベル:', y.argmax(axis=1)[0])" ], "execution_count": 29, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } }, { "output_type": "stream", "text": [ "予測ラベル: 7\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "z0KB6IURMq5J" }, "source": [ "無事正解できていることが確認できました." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "aNGmM0_eMq5K" }, "source": [ "## 新しいネットワークの利用\n", "\n", "ここでは,MNISTデータセットではなくCIFAR10という32x32サイズの小さなカラー画像に10クラスのいずれかのラベルがついたデータセットを用いて,いろいろなモデルを自分で書いて試行錯誤する流れを体験してみます.\n", "\n", "| airplane | automobile | bird | cat | deer | dog | frog | horse | ship | truck |\n", "|:--------:|:----------:|:----:|:---:|:----:|:---:|:----:|:-----:|:----:|:-----:|\n", "| ![Airplane](https://www.cs.toronto.edu/~kriz/cifar-10-sample/airplane4.png) | ![Automobile](https://www.cs.toronto.edu/~kriz/cifar-10-sample/automobile4.png) | ![Bird](https://www.cs.toronto.edu/~kriz/cifar-10-sample/bird4.png) | ![Cat](https://www.cs.toronto.edu/~kriz/cifar-10-sample/cat4.png) | ![Deer](https://www.cs.toronto.edu/~kriz/cifar-10-sample/deer4.png) | ![Dog](https://www.cs.toronto.edu/~kriz/cifar-10-sample/dog4.png) | ![Frog](https://www.cs.toronto.edu/~kriz/cifar-10-sample/frog4.png) | ![Horse](https://www.cs.toronto.edu/~kriz/cifar-10-sample/horse4.png) | ![Ship](https://www.cs.toronto.edu/~kriz/cifar-10-sample/ship4.png) | ![Truck](https://www.cs.toronto.edu/~kriz/cifar-10-sample/truck4.png) |\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "DMuv4lbQRBIC" }, "source": [ "### 新しいネットワークの定義\n", "\n", "ここでは,さきほど試した全結合層だけからなるネットワークではなく,前章で紹介した,畳込み層を持つネットワークを定義してみます.3つの畳み込み層を持ち,2つの全結合層がそのあとに続いています." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "iabj0L8sMq5L", "colab": {} }, "source": [ "class MyNet(chainer.Chain):\n", " \n", " def __init__(self, n_out):\n", " super(MyNet, self).__init__()\n", " with self.init_scope():\n", " self.conv1 = L.Convolution2D(None, 32, 3, 3, 1)\n", " self.conv2 = L.Convolution2D(32, 64, 3, 3, 1)\n", " self.conv3 = L.Convolution2D(64, 128, 3, 3, 1)\n", " self.fc4 = L.Linear(None, 1000)\n", " self.fc5 = L.Linear(1000, n_out)\n", " \n", " def forward(self, x):\n", " h = F.relu(self.conv1(x))\n", " h = F.relu(self.conv2(h))\n", " h = F.relu(self.conv3(h))\n", " h = F.relu(self.fc4(h))\n", " h = self.fc5(h)\n", " return h" ], "execution_count": 30, "outputs": [] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "kExP3QgLMq5O" }, "source": [ "### 学習\n", "\n", "ここで,あとから別のネットワークも簡単に同じ設定で訓練できるよう,`train`関数を作っておきます.これは,\n", "\n", "- ネットワークのオブジェクト\n", "- バッチサイズ\n", "- 使用するGPU ID\n", "- 学習を終了するエポック数\n", "- データセットオブジェクト\n", "- 学習率の初期値\n", "- 学習率減衰のタイミング\n", "\n", "などを渡すと,内部で`Trainer`を用いて渡されたデータセットを使ってネットワークを訓練し,学習が終了した状態のネットワークを返してくれる関数です.`Trainer.run()`が終了した後に,テストデータセットを使って評価まで行ってくれます.先程のMNISTでの例と違い,最適化手法にはMomentumSGDを用い,`ExponentialShift`という`Extention`を使って,指定したタイミングごとに学習率を減衰させるようにしてみます.\n", "\n", "また,ここでは`cifar.get_cifar10()`が返す学習用データセットのうち9割のデータを`train`,残りの1割を`valid`として使うようにしています.\n", "\n", "この`train`関数を用いて,上で定義した`MyNet`モデルを訓練してみます." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "NEvyuq1TMq5O", "colab": {} }, "source": [ "from chainer.datasets import cifar\n", "\n", "\n", "def train(network_object, batchsize=128, gpu_id=0, max_epoch=20, train_dataset=None, valid_dataset=None, test_dataset=None, postfix='', base_lr=0.01, lr_decay=None, snapshot=None):\n", "\n", " # 1. Dataset\n", " if train_dataset is None and valid_dataset is None and test_dataset is None:\n", " train_val, test = cifar.get_cifar10()\n", " train_size = int(len(train_val) * 0.9)\n", " train, valid = split_dataset_random(train_val, train_size, seed=0)\n", " else:\n", " train, valid, test = train_dataset, valid_dataset, test_dataset\n", "\n", " # 2. Iterator\n", " train_iter = iterators.MultiprocessIterator(train, batchsize)\n", " valid_iter = iterators.MultiprocessIterator(valid, batchsize, False, False)\n", "\n", " # 3. Model\n", " net = L.Classifier(network_object)\n", "\n", " # 4. Optimizer\n", " optimizer = optimizers.MomentumSGD(lr=base_lr).setup(net)\n", " optimizer.add_hook(chainer.optimizer.WeightDecay(0.0005))\n", "\n", " # 5. Updater\n", " updater = training.StandardUpdater(train_iter, optimizer, device=gpu_id)\n", "\n", " # 6. Trainer\n", " trainer = training.Trainer(updater, (max_epoch, 'epoch'), out='results/{}_cifar10_{}result'.format(network_object.__class__.__name__, postfix))\n", " \n", " # 7. Trainer extensions\n", " trainer.extend(extensions.LogReport())\n", " trainer.extend(extensions.observe_lr())\n", " trainer.extend(extensions.snapshot(filename='snapshot_epoch_{.updater.epoch}'), trigger=(10, 'epoch'))\n", " trainer.extend(extensions.Evaluator(valid_iter, net, device=gpu_id), name='val')\n", " trainer.extend(extensions.PrintReport(['epoch', 'main/loss', 'main/accuracy', 'val/main/loss', 'val/main/accuracy', 'elapsed_time', 'lr']))\n", " trainer.extend(extensions.PlotReport(['main/loss', 'val/main/loss'], x_key='epoch', file_name='loss.png'))\n", " trainer.extend(extensions.PlotReport(['main/accuracy', 'val/main/accuracy'], x_key='epoch', file_name='accuracy.png'))\n", " if lr_decay is not None:\n", " trainer.extend(extensions.ExponentialShift('lr', 0.1), trigger=lr_decay)\n", " if snapshot is not None:\n", " chainer.serializers.load_npz(snapshot, trainer)\n", " trainer.run()\n", " del trainer\n", " \n", " # 8. Evaluation\n", " test_iter = iterators.MultiprocessIterator(test, batchsize, False, False)\n", " test_evaluator = extensions.Evaluator(test_iter, net, device=gpu_id)\n", " results = test_evaluator()\n", " print('Test accuracy:', results['main/accuracy'])\n", " \n", " return net" ], "execution_count": 31, "outputs": [] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "kURPNSFjMq5S", "outputId": "559efa0d-69f5-4b2c-8e00-1c3ad687d793", "colab": { "base_uri": "https://localhost:8080/", "height": 431 } }, "source": [ "net = train(MyNet(10), gpu_id=0)" ], "execution_count": 32, "outputs": [ { "output_type": "stream", "text": [ "Downloading from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz...\n" ], "name": "stderr" }, { "output_type": "stream", "text": [ "epoch main/loss main/accuracy val/main/loss val/main/accuracy elapsed_time lr \n", "\u001b[J1 1.92583 0.305065 1.72466 0.39668 4.88937 0.01 \n", "\u001b[J2 1.60857 0.423007 1.53026 0.463281 9.25879 0.01 \n", "\u001b[J3 1.47209 0.46964 1.48127 0.478125 13.5662 0.01 \n", "\u001b[J4 1.39223 0.499911 1.39299 0.499609 18.0876 0.01 \n", "\u001b[J5 1.32882 0.526197 1.3789 0.511719 22.5673 0.01 \n", "\u001b[J6 1.26765 0.547852 1.35271 0.516406 27.1432 0.01 \n", "\u001b[J7 1.21327 0.568999 1.25582 0.560547 31.8979 0.01 \n", "\u001b[J8 1.16433 0.583984 1.22899 0.570508 36.4486 0.01 \n", "\u001b[J9 1.12036 0.602384 1.23554 0.565039 40.9875 0.01 \n", "\u001b[J10 1.07057 0.61899 1.21995 0.56543 45.5839 0.01 \n", "\u001b[J11 1.02992 0.636808 1.1724 0.585938 50.4524 0.01 \n", "\u001b[J12 0.98116 0.653112 1.19605 0.579883 55.0429 0.01 \n", "\u001b[J13 0.938254 0.667392 1.159 0.59375 59.4494 0.01 \n", "\u001b[J14 0.901819 0.681067 1.20838 0.579492 64.0684 0.01 \n", "\u001b[J15 0.855333 0.698287 1.19485 0.585938 68.5982 0.01 \n", "\u001b[J16 0.810262 0.714321 1.19381 0.583984 73.0674 0.01 \n", "\u001b[J17 0.764117 0.731423 1.21938 0.587109 77.5318 0.01 \n", "\u001b[J18 0.72205 0.743697 1.20823 0.585742 81.9437 0.01 \n", "\u001b[J19 0.666414 0.764712 1.23899 0.593164 86.2922 0.01 \n", "\u001b[J20 0.620457 0.782715 1.24922 0.597461 90.6681 0.01 \n", "Test accuracy: 0.6065071\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "cXSoxEcvMq5W" }, "source": [ "学習が20エポックまで終わりました.損失と精度のプロットを見てみましょう." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "LsjyDJSPMq5Y", "outputId": "4f8717af-d16e-4dce-f0e0-daec009eaaa7", "colab": { "base_uri": "https://localhost:8080/", "height": 279 } }, "source": [ "Image(filename='results/MyNet_cifar10_result/loss.png')" ], "execution_count": 33, "outputs": [ { "output_type": "execute_result", "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "tags": [] }, "execution_count": 33 } ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "xHuqlhrUMq5b", "outputId": "1f985782-9c5d-47f8-c2d1-e0a624d83135", "colab": { "base_uri": "https://localhost:8080/", "height": 281 } }, "source": [ "Image(filename='results/MyNet_cifar10_result/accuracy.png')" ], "execution_count": 34, "outputs": [ { "output_type": "execute_result", "data": { "image/png": "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\nHIHm4NpEQteMGTOGtLS0Wu83IiKiRuViY2P573//W+vjmTqpIRBCiDKUUsT/nsnLccc4di6PEDcH\nXpvQE4UyDtAT4eNCPx/ncsuiYVy5coXs7Gzc3Nxqva9rsxtWZ82aNTz22GO1Pt7N0Ov1DT5qodQQ\nCCHEVb+l5nDfhzt4cPEurpToWTi5F9/PHkB/H2cOpOWWu/iXHUegWdvyJiRvKr8ueZO2/hbNmzeP\nd99917g8f/58/vOf/zBs2DBCQ0MJCgpi5cqVlW4bHx9vnNfA09OTf/zjH/Ts2ZOwsDD27t3LqFGj\n8PHxYdGiRQDk5+dXud+yUxhHRkZy77334u/vz5QpU1BKAVqCuH//fkJDQ6ucklmv1/O3v/2NHj16\nEBwczDvvvAPArl27iIiIICQkhD59+pCXl8fixYuZM2eOMYY77rjDOLdCmzZtePLJJ42jIb7wwguE\nh4fTo0cPZs2aZYzpxIkTDB8+nJCQEEJDQ0lKSuKBBx7g+++/N+53ypQpVZ7DKjXI0EiVkJEKb53E\nVzumHp9Sph9jc4svJStfPfrFHuXx9x9V6As/q8Vbk1VRib5+glO1O38NPVKhOrlRqZe9tNfKlm/B\n3r171eDBg43L3bt3V6dPn1a5ublKKaUyMzOVj4+PMhgMSqnrUw0rpdRf/vIX9csvvyillPLw8FDv\nvfeeUkqpuXPnqqCgIHXp0iV1/vx51b59e6WUUiUlJdXud8OGDcre3l6lpqYqvV6v+vXrpzZv3qyU\nUmrPnj1q6tSpSilV5ZTM7733nrrnnnuM72VnZ6uioiLl5eWlEhISym376aefqtmzZxs/z+233278\nfQDUl19+aXzv2hTJSil1//33q1WrVimllOrTp4/69ttvlVJKXblyRV2+fFnFx8eru+66SymlVE5O\njvL09DTGU5aMVCiEaPH+OI4AQNyhs3y46SS/peViaW7GY0N9eXiwN3Y2tZ/Nr8lYMw/OHbxxGbtO\n8Pk47TXvLLTzh/iXta/KdAyCMQuq3F2vXr04f/48Z86cITMzE0dHRzp27Mhf//pXNm3ahJmZGenp\n6WRkZNCxY8dy227dupVXX33VuBwdHQ1AUFAQ+fn52NnZYWdnh7W1NTk5Odja2vJ///d/1e63T58+\nxscQPXv2JCUlhYEDBxIXF8eYMWMAqpySef369TzyyCNYWGiXVCcnJw4ePEinTp0IDw8HwN7e/sbn\n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\nSUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": { "tags": [] }, "execution_count": 34 } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "Wpz2mcvpMq5g" }, "source": [ "学習データでの精度(`main/accuracy`)は77%程度まで到達していますが,テストデータでの損失(`val/main/loss`)は途中から下げ止まり,精度(`val/main/accuracy`)も60%前後で頭打ちになってしまっています.表示されたログの最後の行を確認すると,テストデータでの精度も同様に60%程度となっています.学習データでは精度が良いが, テストデータでは精度が良くない場合,**モデルが学習データにオーバーフィッティングしている**と考えられます." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "sSB6NmM_Mq5h" }, "source": [ "### 学習済みネットワークを使った予測\n", "\n", "テスト精度は60%程度でしたが,試しにこの学習済みネットワークを使っていくつかのテスト画像を分類させてみましょう.あとで使いまわせるように`predict`関数を作っておきます." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "cZVANymqMq5h", "outputId": "7925fc70-2af4-49e3-e21c-4d480dbf4f3b", "colab": { "base_uri": "https://localhost:8080/", "height": 1000 } }, "source": [ "cls_names = ['airplane', 'automobile', 'bird', 'cat', 'deer',\n", " 'dog', 'frog', 'horse', 'ship', 'truck']\n", "\n", "def predict(net, image_id):\n", " _, test = cifar.get_cifar10()\n", " x, t = test[image_id]\n", " net.to_cpu()\n", " with chainer.using_config('train', False), chainer.using_config('enable_backprop', False):\n", " y = net.predictor(x[None, ...]).data.argmax(axis=1)[0]\n", "\n", " plt.imshow(x.transpose(1, 2, 0))\n", " plt.show()\n", " print('predicted_label:', cls_names[y])\n", " print('answer:', cls_names[t])\n", "\n", "for i in range(10, 15):\n", " predict(net, i)" ], "execution_count": 35, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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\nsY/eNmfTOwAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } }, { "output_type": "stream", "text": [ "predicted_label: airplane\n", "answer: airplane\n" ], "name": "stdout" }, { "output_type": "display_data", "data": { "image/png": "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\nrkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } }, { "output_type": "stream", "text": [ "predicted_label: truck\n", "answer: truck\n" ], "name": "stdout" }, { "output_type": "display_data", "data": { "image/png": "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\nAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } }, { "output_type": "stream", "text": [ "predicted_label: dog\n", "answer: dog\n" ], "name": "stdout" }, { "output_type": "display_data", "data": { "image/png": "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\nmAAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } }, { "output_type": "stream", "text": [ "predicted_label: horse\n", "answer: horse\n" ], "name": "stdout" }, { "output_type": "display_data", "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPsAAAD5CAYAAADhukOtAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0\ndHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAfEElEQVR4nO2de4xd13Xev3WfM3PvPMnhmyJFiXrZ\nsSWFpuVICdzED9UxLAtoDfsPQwGEKAhiIAbSPwQXqF2gQJ2itmughQu6FqwUjh+NbUhtVMey4lRQ\naz3GEkVSol6WKHLI4QwfM5wZ3jtzX6t/3EuAEva3Z8SZuaNkfz+A4J297j5n333OOufc/d21lrk7\nhBD/9Mms9wCEEN1Bzi5EIsjZhUgEObsQiSBnFyIR5OxCJEJuJZ3N7E4A3wSQBfDf3P2rsfcPDRR8\n62hf0Nao1Wi/XD48zJhq6E1u9Mg1rtUy3i/TE2y3TIH26SuXqA2WpaZqpUptA4NDfJMWHn9UYI1M\nZFyYjVn5PF7ROGLHOjKOFumYzfC5z2SuYOxrwJWo4sePH8PZs2eDH+CKnd3MsgD+C4CPAhgH8IyZ\nPezuL7I+W0f78N1/f0fQdu7UKbqv4S0bgu31xRbt05pvUFujFb7gAMDcxTzvV74h2J7v20773Po7\nt1FbpjBIbc89c4jaPvrJu6ktXwgf0laLnznNZpPaWs5tsd9oGHF2djECgEaTH89GI3Ksm/xGUWnV\ng+0DPQO0T19v+KIOXJkDLgXbZqvFPzPj9jv2U9tKHuP3A3jN3V939xqAHwC4awXbE0KsIStx9u0A\nTlz293inTQjxLmTNF+jM7D4zGzOzsZlZ/rglhFhbVuLsJwHsvOzvHZ22t+DuB9x9n7vvGxrgC1lC\niLVlJc7+DIC9Zna1mRUAfBbAw6szLCHEanPFq/Hu3jCzLwD4O7Sltwfc/YVYn0wWKJFF0NoCv+sb\nuSTNzYZXWgEgyxeRkc3xrxP9PRVqq84/G2yfPvX/aJ+nLoxRW7PvWmor9O2ktlff5MpFi8hQ+RxX\nGRYWF6jt2Kkz1FatRVbxW+w+wlfj5xf58aws8n1lmtPUtnAxfDxvv/km2mf/Lb9Fbc2IpIuI0hCD\nqRpXFJEa6bMind3dHwHwyEq2IYToDvoFnRCJIGcXIhHk7EIkgpxdiESQswuRCCtajX+nuGdQa/QG\nbRkSwAEAhd6wbLR5e0TGOX+R2i5O84inlvEAmgzR87ZspV3wSpUHXIxP8Ii4HVu41PTM/+ZyXo0o\nL4Us/8wOLnlduMij7xp1fq9wIrHVanxftUiwS73B56NW59scKoRtN98Q+TWnxaLoIppu5N7JAoOA\nK5TYrgDd2YVIBDm7EIkgZxciEeTsQiSCnF2IROjqanyz3sTMZHiVvLrAV8+zxfA1qXqRr5xbkY9j\naJRf42pVPiW5HBlHna/QHhrnAShTVb7SDePb/OWhcWpzEvBSjGwPWKSWRmQVObIIjmw2PI/NJj9m\n9QZflY6lrKo0+DZv2DESbH/yyYO0T7PO52P/B95Hbb0Fnu4slvork+nOPVd3diESQc4uRCLI2YVI\nBDm7EIkgZxciEeTsQiRCV6W3TMZR6g3LGq0Ml6haFpZd5md47jTP8cCPZiTXWU+ej6MnG5ahsqQd\nAE6cm6K2ibPz1LalFJaMAODN43ybpXI52F50Lk/VFnnevYbzz2alfmor9oQDnhApchItveWRIJl6\npPoPkeyOvHaM9nnhKC1qhDdOHKe2T33qTmobIscFABokr100pR2ZjlhIje7sQiSCnF2IRJCzC5EI\ncnYhEkHOLkQiyNmFSIQVSW9mdgzAHIAmgIa774u+P+PI9ZLon0jkEhAuDTU0wmWyeiRyab7G+1Uj\n4zh/vifYnmc1rQCMZMN9AGDDzi3U1tPDr8ND/bxUVm9v+JBmwMMAcwVua5HotXZHPo+LjXCOt2qF\n537zyL2nUOD7cvBj1myGz4NsH5EGAV5vDMDPfvEktb05MUltd//hx6jt+r3hMmDZSMRhg2hvHhHf\nVkNn/2fufnYVtiOEWEP0GC9EIqzU2R3Az83s12Z232oMSAixNqz0Mf4Odz9pZpsAPGpmL7n745e/\noXMRuA8AtoxG0scIIdaUFd3Z3f1k5/8pAD8FsD/wngPuvs/d9w0P8EUWIcTacsXObmYlM+u/9BrA\nxwAcWa2BCSFWl5U8xm8G8FNrh+bkAPy1u/8s1qFec5weD0shk1M84eSuG8LRVafnttM+Zxd48r/F\nxii1VUh5KgCwTNi2OcvLOF277Ry3XbuN2l46eYHabt23h9papJRQLKkhK9UEAM1Iosr++hy1NYiE\nOTnLIw4nTh6jtplpHm3WqnGZtTm6N9h+Mc+jCod6eYRaEfzp9LnDb1Bbq/4Itf3LT3082D51np8D\n5cGw3Ftd4JGgV+zs7v46gPdfaX8hRHeR9CZEIsjZhUgEObsQiSBnFyIR5OxCJEJXE04aHFmSPHKw\nl0cuPXEwfE0aO86jzWpZngzRbZbamq0Zart2V1jyshxPhvjGBR7l1V/hMtTxMyeprY9/bLRa4bG0\nmpHEkZHEht7iUVTW4POYs3C03/VX7aB9btrBZc+Dz/BYq2d+9QS1Za/aHDb0baR96pHPXIvcHnv6\nBqmt3M9tLRKh+Xf/8BTts2HDpmD73DyvH6g7uxCJIGcXIhHk7EIkgpxdiESQswuRCN1djc84evrC\nq9O1Bg8mOfoiySPm/4f22RwJ/Dh5mq+Qz9X5Kv6OD4RzhdVaPBCjp48vdddzPMik2MfLVw2VeLBD\nsxXeZsv49tz46nOGqCcA0FrkufCmzoY/d23mN7TPVdv4ivXevddR29HDPC9cZT4crJMf4OqP93C3\niJVXcudzbJHyZkMbNwTbs5G9XZgJq0bNSA5F3dmFSAQ5uxCJIGcXIhHk7EIkgpxdiESQswuRCF2V\n3hoNx9mzYdlo/BSXLbK5cD65naM8z9zGES4ZVWrc1gNekmnjlnDOuFde5XJSucTTZ9drXCYp9PLP\n5pFLdIOoNdksn99cpMRTNnI/qDmXHM3CQT79Q3xfv7v/Bmp7te8EtT3U5AFFc9X5YHu5FSs3xiHK\nZtvmXGadq/BzbrYSnkeLHGh27pAUhAB0ZxciGeTsQiSCnF2IRJCzC5EIcnYhEkHOLkQiLCm9mdkD\nAD4JYMrd39tpGwHwQwC7ARwD8Bl3n15qW5ks0FsOyxP1bKQ8UTacm8yNR68tRpKFZfNcDtuy6Sre\nLxfe5oXZsLwDANs2khxoAGbmePmkYkQOy0XyybWYXGOR63okCV3TuazVanA5qboQlpOGM3zuR4d5\nXrhzw3yOzXhEWZNIUc1InrmYfBWT1zxSKqvR5LbZufB53IjKgzzikLGcO/t3Adz5trb7ATzm7nsB\nPNb5WwjxLmZJZ+/UWz//tua7ADzYef0ggE+v8riEEKvMlX5n3+zuE53Xp9Gu6CqEeBez4gU6d3dE\nEniY2X1mNmZmYxfmr+wnikKIlXOlzj5pZlsBoPP/FHujux9w933uvm+w3NWf4gshLuNKnf1hAPd0\nXt8D4KHVGY4QYq1YjvT2fQAfBrDRzMYBfBnAVwH8yMzuBfAmgM8sZ2fuLTRalaCt4jzZYIWUxxlq\n8mtVk0g/AFDsHaG2oY07qS1HNJlSL5eThgZ5raapcfpAhJHyELVZRCrzZlgOc1IWCgBaEa3Js1x6\n80gk3UIkspBuLxLlVa1GEikan/9WI7xNb0XkxkhoWytWDiuSILKvzD9bPkfk6Mgc1prh6FFW/gtY\nhrO7++eI6Q+W6iuEePegX9AJkQhydiESQc4uRCLI2YVIBDm7EInQ1V+5NJvAhdnw9WXyfCSKpxGO\nCmo2uYRWyfJIqNLoDmobGOLbdIQlkp5CJGFjJlL/y/lntiLfpkUSVWaIjFZrcikyE6mLZxk+jmpE\nGspmwvJVZTZcowwAxk+cpLZGk0c4WobLaAO94fMgopZisR6RKZuRGnHO+5UH+LHuL4fPkYUql/Iq\nZBzNiIyqO7sQiSBnFyIR5OxCJIKcXYhEkLMLkQhydiESobsB5pkMrBjWPBaaPDqsnAsPs7hhF+1z\nbiOvG1aYvEBtmUi03PHJM8H2N06do31GhnkSn7k5Po5iH5d4egs91JbrCV+/Y7Xjenv59iI5JXEh\nIqOVyRgzJCoPAMbGnuY7a8XqnoUjKQGgTiLYYrKhR5JDNhqRYm/Oj9nEcS4rTl4XTnI6XwtHtgFA\nnUTfuaQ3IYScXYhEkLMLkQhydiESQc4uRCJ0dTW+UXdMTYZXM8cr22m/GskjdvoVHmRSPlultpHh\nEu/Xw3O/VRcvBtvv+O1baZ9GZPW5VOT7mr3AP9tcJrLNnvBqbD4yjtgKbr0eCcao8NNn9mK438VW\nuJQXALSKkSCTM7+htmwkF16FjGM4kqutESl5Va1yWybLg12efPJlanvjtdPB9nkuDGFgqJ8bCbqz\nC5EIcnYhEkHOLkQiyNmFSAQ5uxCJIGcXIhGWU/7pAQCfBDDl7u/ttH0FwB8DuBQZ8iV3f2SpbTXq\nwLnTYcljYobLYecXw7beiTna5w9383JSfQV+jRsZ5v3QCEsrvf08kKS2wPOjlW64kdp++fwpanvx\ntVlqK1o4KCSfmad9MkX+mZs5LidF4mfQ6+FxDG7dQ/tcvWcTtb0wGZanAODq3Vy2nUM4AKhY4oFB\nkepPQKREVSR1HRaafH/1k+GAqL5+HhzWR5LoZSL5+JZzZ/8ugDsD7d9w95s7/5Z0dCHE+rKks7v7\n4wDOd2EsQog1ZCXf2b9gZofM7AEzG161EQkh1oQrdfZvAbgGwM0AJgB8jb3RzO4zszEzG6ssxr4M\nCSHWkitydnefdPemt7PifxvA/sh7D7j7Pnff11fkv2EWQqwtV+TsZrb1sj/vBnBkdYYjhFgrliO9\nfR/AhwFsNLNxAF8G8GEzuxmAAzgG4E+WtTczeDYsGWwvcDmph0QobXvve2ifzSNc6vj5o/9AbVjY\nQk3Hj48H23fv3k37sEg5AGjWeUmjj3zwI9T26kkeQTU1S6KySOQgADQq/Ikrl+GRaEM5nkNv40D4\nmDUKvCxXTx+X+RpVHgI2UuIRYAUiHW4Y4NF3VeNzVW7yKMBajX9NbUYi+vJE0s1EZM9+UtYqY1x6\nW9LZ3f1zgebvLNVPCPHuQr+gEyIR5OxCJIKcXYhEkLMLkQhydiESoasJJ+erwBOHw9JFo59LBgsL\n4TI4Ja5MYGaGy0KNGo8Aq1a4VHZ+Klz+6dqd4fI9AHD82DFqmyLlpADg9n23UdsHbyxT298+HZbe\nRiLlpLYXXqe2lyu8xFYlyyMVZ6rheRyY5yWNZha5rYKwZAsAJ87xz3bdjeExbhvl0uzkBX4ODEZ+\nGJYvR8IAh/gvyr0RHkuhGDnBEfajTOT2rTu7EIkgZxciEeTsQiSCnF2IRJCzC5EIcnYhEqGr0lvL\ns6g0w0n0brz+etpv29Zwn1qdRxk998o5asv1cPmk2MOn5EP7bwm2bx7msspLL/Ex9uT5tfbk1AS1\nHT/BpaZFkiCkHqkPV2WRcgBaxm2lYS415WvheRxocnmtf57Lpbu28aSYVhmhtnJvWKLatZXP/eZI\nLUC0InXxanyu5uf4586S86ARmav5i6SWofPzTXd2IRJBzi5EIsjZhUgEObsQiSBnFyIRuroaXyhk\ncfWuDUFbuZ+vkG8fCQ/zxCQv/zQ+zXOWXTPCV1uPH3+D2gqZcDDG+KlwbjoA8DwP8CmX+QrzEwdP\nUNv4GZ5z7ZMf2BhsLxR4IMm5GT6OmWm+utuKnD3WCn/u6dNnaZ/pQmTF2vnxnD3L53/yxGvB9iNj\nT9I+C5F8d4ZIeaUsv3cOjHDFZnExrK709EZKb5EcdAuRQC7d2YVIBDm7EIkgZxciEeTsQiSCnF2I\nRJCzC5EIyyn/tBPAXwHYjHbiqwPu/k0zGwHwQwC70S4B9Rl3n45uLONo5sMlj/72Vzzw4xf/dyrY\nnu/jMgiKQ9QUSQcGzHM57+8ffzrYPjvLc9rd8bsfpLZtW0ap7aWz/NAsOg9Aed/1Yelta4kHz8zO\n8zJU009yOex0nct5LVKGKJvnATnFXi4bvfICz5P37DPPUdvVe3YE22cu8GM2McWDqIaH+HnVP8gl\n0fdfdwO1zZ4Pn3MDgzxP3vibYUnRnQfqLOfO3gDwF+5+E4DbAPyZmd0E4H4Aj7n7XgCPdf4WQrxL\nWdLZ3X3C3Z/tvJ4DcBTAdgB3AXiw87YHAXx6rQYphFg57+g7u5ntBnALgKcAbHb3S8/ep9F+zBdC\nvEtZtrObWRnAjwF80d3fUl/Z218Ugl8WzOw+Mxszs7HFRR7cL4RYW5bl7GaWR9vRv+fuP+k0T5rZ\n1o59K4DgKpq7H3D3fe6+r1jktbmFEGvLks5uZoZ2Pfaj7v71y0wPA7in8/oeAA+t/vCEEKvFcqLe\nbgfweQCHzexgp+1LAL4K4Edmdi+ANwF8ZqkNDfQP4uMf+XjQNvwSj3o7Nx9+/G+1eETWuVOvUFv1\nPJehTp86TW2Zelg2KmX42F975Ri1vfc6nnevGClp1Gzwz/3XP3s52F7OcUkmHylpdLbC5bVMifcb\nJlFZucjtZX5ultqu2bub2t7z/vdQ28XZmWD76KZw9CUA9JZ7qa0VyUFX6udluXLGj1l/OTyP5lwe\nzIBLmHQMS73B3Z8AaFzfH7zjPQoh1gX9gk6IRJCzC5EIcnYhEkHOLkQiyNmFSISuJpwsl0r4nd8O\nR4F96FYuTcwuhKW389O8XNDMGZ6s7/gxLq8VbrmO24jkVSHyDgAcGef7euP4SWqrzfBtDnk4sg0A\n6o1rg+0Ti3w+5iJSZC5yhgyWuQyV9XC0XKvKo+imz/NfWG7cwCXAq665mtpefP5wsH379u20TybD\noykPHz5KbdkMv3fGpDcvhPfXE5F0cx4+Zhb+ISsA3dmFSAY5uxCJIGcXIhHk7EIkgpxdiESQswuR\nCF2V3twdtWZYMshHwqFK2bAkUy9ymWF4z05q+58PPUZt7dB9ss3BcDTU6CYuhd37R5+ltmKBSyvz\nF3nyxVqTz9UciRCscuUH1TqX5Y68zuXNX73KpcM3zoSThG7q43XURkcGqC3b5JJdT56PHxaeq3qD\ny43FHD8uhRzfV6POpcNNozzK7kKlGmzPRiTA8uCr4T5ZSW9CJI+cXYhEkLMLkQhydiESQc4uRCJ0\ndTW+Wq3gyKFng7ad27bwjgvhlelqlZct2n7dHmq74yN3UNvrr09S2+xMOCfYsZNnaZ+ZaV5KaM9u\nHoxh4IEfu/bspTZfDJcSysVWrJvh1WAA6MvzVfAnX+C2hUa4RFWjUaF9Bkt8jLe+70ZqOz/7JLWx\nnHHH3xynfSLxLGg6z/12IZJDr1TipaEmz4eDnupEuQKAcik8v5nI4HVnFyIR5OxCJIKcXYhEkLML\nkQhydiESQc4uRCIsKb2Z2U4Af4V2SWYHcMDdv2lmXwHwxwDOdN76JXd/JLatqckz+M//6dtB285t\nPJhk6+ahYHs+z4NWNr/0ErXtvnoXtW2/9SpqyxfDcse2bTzoppTnwQxzF7j8Y5HyPs3aJmqrL4Sl\nrUZmmPbxiMSzWOEBOQORQp35oVKwPVMPB8gAQNZ4EEdM1mo571cg+d1OnojMfST3W1+Jl4aq1fgx\nO/b6m9TWnwsH0GSLXFoe2XhNsP3vC+EAGWB5OnsDwF+4+7Nm1g/g12b2aMf2DXf/j8vYhhBinVlO\nrbcJABOd13NmdhQA/zWIEOJdyTv6zm5muwHcAuCpTtMXzOyQmT1gZvw5UQix7izb2c2sDODHAL7o\n7rMAvgXgGgA3o33n/xrpd5+ZjZnZWKMZyaAghFhTluXs1k7f8mMA33P3nwCAu0+6e9PdWwC+DWB/\nqK+7H3D3fe6+L5flCx9CiLVlSWc3MwPwHQBH3f3rl7VvvextdwM4svrDE0KsFstZjb8dwOcBHDaz\ng522LwH4nJndjLYcdwzAnyy1IbMM8tlwNNfkWZ7rbI5EvRUK/Fp18OWXqe30BI+8iuXwGhoORy7t\n3Moj9rZv4rnHymX+pDO6mUuRZ87xKLWBvrAcNriRj6O/j0fYeS0i/3g4ChAARjeHI+Iq81yKLJXC\nch0AzM2Ho/kAoFnnee2GSFq7oRt4vrveXn5cIqocCvkytfVkeTmvzRvC0nJvL58Ps/BAMtlICSpq\n6eDuTwAIHaGopi6EeHehX9AJkQhydiESQc4uRCLI2YVIBDm7EInQ1YSThUIOO3aFJaBWiycvzBCZ\noVrlEVn5PNdIai3+S77Zc3wcx06E5ZNnxiKRRjkeCZWNjDEXKUE01M+TF44MhuWf0WEuNY0MDVLb\ndKRu1OlJLifNlsKnVm+Zy0nz27g8mMuH5SkAyGZ41N5gOSz1DQ5yaXN0hI8jm+VRb6Ueflw2RPbn\nRI1sRsp8OTks3uLSpu7sQiSCnF2IRJCzC5EIcnYhEkHOLkQiyNmFSISuSm+ZjKPUF5ZJFhe5fDI3\nG5bYZmZ59Fq1yreXBbeNDPIkio5wLTJvcDmpssgjss5f5NLhYp1Hm81dPENt45PhunMZi0RDRWS+\nvhzv1xNJOHk+F46kG9nAZb4b69dTW+0ilwCHSnz8pd1ERsvx7WV7eM25YqGP2vI9fBwLrWlqa1TD\n/Rr1SN02EvHpTJOD7uxCJIOcXYhEkLMLkQhydiESQc4uRCLI2YVIhO5Kbwb05sPXF4tE+LSKRGbo\n58MvcvUEhkjWwMg4qo1wMsrpxYiEFonmy0VkrVaTRy9lC3z8WZJwMMNCq4B2ylBCIbKvcpnLUAMk\num3DCI9ea9a5lJprhevsAcAIVz6R6R8NtlcjkmjNua1Z45F+tRY/H/NFPle1RniOm87Pj3w+LG3G\nDrPu7EIkgpxdiESQswuRCHJ2IRJBzi5EIiy5Gm9mPQAeB1DsvP9v3P3LZnY1gB8A2ADg1wA+7+48\negNANpPHYF94dbS/h6+AYij84/56JFik2axT29zFWWqrLvJAgvHTpERVhpdPqtb48mhMgciTvHsA\n0LTISj2JTfHI6n4uwwNaSr0859rGUb4MvmFDOOfdYB+XSXqNlwBbnOOlphoNfszyufAqfjHPA3KG\nS3yMDefn1cw0V2WqdT7HDXKsefZCoFQI57uzTCR4JrK9SywC+H13fz/a5ZnvNLPbAPwlgG+4+7UA\npgHcu4xtCSHWiSWd3dtcuqzmO/8cwO8D+JtO+4MAPr0mIxRCrArLrc+e7VRwnQLwKIDfAJhx90uB\n4eMAtq/NEIUQq8GynN3dm+5+M4AdAPYDuGG5OzCz+8xszMzGKguR7+VCiDXlHa3Gu/sMgF8C+BCA\nITO7tMC3A8BJ0ueAu+9z9319PXwhSwixtizp7GY2amZDnde9AD4K4CjaTv8vOm+7B8BDazVIIcTK\nWU4gzFYAD5pZFu2Lw4/c/X+Z2YsAfmBm/w7AcwC+s+TOCgVs3rEraGtU+SO+sZxxkUtVy7lwUV88\nT221Bpd4tu0Il1aar3A5ZnqOS16L1YhS2YgEY0SktyIJGirmuJyUjch8Nf7RMDDEn9RK/eExFnM8\n2CUTicipR2TKjPEgExblE1GoUK9FSnbl+L56e/k8xiSxejU8J6zsGQD4QjVsaPE5XNLZ3f0QgFsC\n7a+j/f1dCPGPAP2CTohEkLMLkQhydiESQc4uRCLI2YVIBHOPJCBb7Z2ZnQHwZufPjQDCtYq6i8bx\nVjSOt/KPbRy73D0YWtpVZ3/Ljs3G3H3fuuxc49A4EhyHHuOFSAQ5uxCJsJ7OfmAd9305Gsdb0Tje\nyj+Zcazbd3YhRHfRY7wQibAuzm5md5rZy2b2mpndvx5j6IzjmJkdNrODZjbWxf0+YGZTZnbksrYR\nM3vUzF7t/D+8TuP4ipmd7MzJQTP7RBfGsdPMfmlmL5rZC2b25532rs5JZBxdnRMz6zGzp83s+c44\n/m2n/Woze6rjNz80s0iRswDu3tV/ALJop7XaA6AA4HkAN3V7HJ2xHAOwcR32+3sAbgVw5LK2/wDg\n/s7r+wH85TqN4ysA/lWX52MrgFs7r/sBvALgpm7PSWQcXZ0TAAag3HmdB/AUgNsA/AjAZzvt/xXA\nn76T7a7HnX0/gNfc/XVvp57+AYC71mEc64a7Pw7g7UH1d6GduBPoUgJPMo6u4+4T7v5s5/Uc2slR\ntqPLcxIZR1fxNque5HU9nH07gBOX/b2eySodwM/N7Ndmdt86jeESm919ovP6NIDN6ziWL5jZoc5j\n/pp/nbgcM9uNdv6Ep7COc/K2cQBdnpO1SPKa+gLdHe5+K4B/DuDPzOz31ntAQPvKjmgh5TXlWwCu\nQbtGwASAr3Vrx2ZWBvBjAF9097dU8ujmnATG0fU58RUkeWWsh7OfBLDzsr9pssq1xt1Pdv6fAvBT\nrG/mnUkz2woAnf+n1mMQ7j7ZOdFaAL6NLs2JmeXRdrDvuftPOs1dn5PQONZrTjr7fsdJXhnr4ezP\nANjbWVksAPgsgIe7PQgzK5lZ/6XXAD4G4Ei815ryMNqJO4F1TOB5ybk63I0uzImZGdo5DI+6+9cv\nM3V1Ttg4uj0na5bktVsrjG9bbfwE2iudvwHwr9dpDHvQVgKeB/BCN8cB4PtoPw7W0f7udS/aNfMe\nA/AqgF8AGFmncfx3AIcBHELb2bZ2YRx3oP2IfgjAwc6/T3R7TiLj6OqcAHgf2klcD6F9Yfk3l52z\nTwN4DcD/AFB8J9vVL+iESITUF+iESAY5uxCJIGcXIhHk7EIkgpxdiESQswuRCHJ2IRJBzi5EIvx/\nqmVLHXmQffcAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } }, { "output_type": "stream", "text": [ "predicted_label: truck\n", "answer: truck\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "X1IJmNiHMq5l" }, "source": [ "うまく分類できているものもあれば,そうでないものもありました.ネットワークの学習に使用したデータセット上ではほぼ百発百中で正解できても,未知のデータ,すなわちテストデータセットの画像に対して高精度な予測ができなければ意味がありません.テストデータでの精度は,モデルの**汎化性能**に関係していると言われています.\n", "\n", "どうすれば高い汎化性能を持つネットワークを設計し,学習することができるでしょうか?これは非常に難しい問いですが,機械学習を使った応用を考えるとき,最も重要な問いの一つです." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "l6-aXDxhMq5l" }, "source": [ "### 深いネットワークの定義\n", "\n", "では,さきほどのネットワークよりも多層のネットワークを定義してみましょう.ここでは,1層の畳み込みネットワークを`ConvBlock`,1層の全結合ネットワークを`LinearBlock`として定義し,これを数多く積み重ねることで大きなネットワークを定義してみます." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "R_HtP-XAVcrI" }, "source": [ "#### 構成要素を定義する\n", "\n", "まず,ネットワークの構成要素となる`ConvBlock`と`LinearBlock`を定義してみましょう." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "kokxUuBUMq5m", "colab": {} }, "source": [ "class ConvBlock(chainer.Chain):\n", " \n", " def __init__(self, n_ch, pool_drop=False):\n", " w = chainer.initializers.HeNormal()\n", " super(ConvBlock, self).__init__()\n", " with self.init_scope():\n", " self.conv = L.Convolution2D(None, n_ch, 3, 1, 1, nobias=True, initialW=w)\n", " self.bn = L.BatchNormalization(n_ch)\n", " self.pool_drop = pool_drop\n", " \n", " def forward(self, x):\n", " h = F.relu(self.bn(self.conv(x)))\n", " if self.pool_drop:\n", " h = F.max_pooling_2d(h, 2, 2)\n", " h = F.dropout(h, ratio=0.25)\n", " return h\n", " \n", "class LinearBlock(chainer.Chain):\n", " \n", " def __init__(self, drop=False):\n", " w = chainer.initializers.HeNormal()\n", " super(LinearBlock, self).__init__()\n", " with self.init_scope():\n", " self.fc = L.Linear(None, 1024, initialW=w)\n", " self.drop = drop\n", " \n", " def forward(self, x):\n", " h = F.relu(self.fc(x))\n", " if self.drop:\n", " h = F.dropout(h)\n", " return h" ], "execution_count": 36, "outputs": [] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "7PWQmRE4Mq5o" }, "source": [ "`ConvBlock`は`Chain`を継承した小さなネットワークとして定義されており,一つの畳み込み層とBatch Normalization層で構成されます.Batch Normalization層は,ネットワークの学習プロセスを安定させるために広く利用されている手法の一つで,例えば今回のように,畳み込み層の直後に挿入する形で利用されます.`forward`メソッドでは,これらにデータを渡しつつ,活性化関数ReLUを適用して,さらに`pool_drop`引数が`True`であれば,Max PoolingとDropoutを適用するような順伝播の計算が行われます.Dropoutは,ネットワークの過学習を避けて汎化性能を上げる目的で利用される手法の一つで,層の中のノードのうち,一定割合(dropout ratioと呼ばれる)をランダムに無効にしながら学習を行います(無効にする割合は`ratio`という引数で指定でき,何も指定しなければ50%が無効化されます).推論時は,dropout ratioを$p$とすると,Dropout層への入力をただ$p$倍して出力するだけの層として働きます.これによって,擬似的に複数のネットワークの学習結果をアンサンブル(参考:[Ensemble averaging](https://en.wikipedia.org/wiki/Ensemble_averaging_(machine_learning)))するような効果があると言われ,汎化性能が向上する場合があります.最適化の際にモデルのパラメータに何らかの制約を与えて汎化性能を向上させるための工夫は正則化(regularization)と呼ばれ,このDropoutやパラメータの絶対値が大きくなりすぎないようにするWeight decayなどの方法が知られています.\n", "\n", "Chainerでは,Pythonを使って書いたforward計算のコード自体がネットワークの構造を表します.すなわち,実行時にデータがどの層を通過していったか,によってネットワークそのものが定義されます.この性質によって,上記のような分岐などを含むネットワークも簡単に記述でき,柔軟かつシンプルで可読性の高いネットワーク定義が可能になります.これが**Define-by-Run**の大きな特徴となっています." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "7KpJgoXQMq5p" }, "source": [ "#### 大きなネットワークの定義\n", "\n", "次に,これらの小さなネットワークを構成要素として積み重ねて,大きなネットワークを定義してみましょう." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "2lMV0pumMq5q", "colab": {} }, "source": [ "class DeepCNN(chainer.ChainList):\n", "\n", " def __init__(self, n_output):\n", " super(DeepCNN, self).__init__(\n", " ConvBlock(64),\n", " ConvBlock(64, True),\n", " ConvBlock(128),\n", " ConvBlock(128, True),\n", " ConvBlock(256),\n", " ConvBlock(256),\n", " ConvBlock(256),\n", " ConvBlock(256, True),\n", " LinearBlock(),\n", " LinearBlock(),\n", " L.Linear(None, n_output)\n", " )\n", "\n", " def forward(self, x):\n", " for f in self.children():\n", " x = f(x)\n", " return x" ], "execution_count": 37, "outputs": [] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "Wywy-_DVMq5s" }, "source": [ "ここで,`ChainList`というクラスが利用されています.このクラスは`Chain`を継承したクラスで,いくつもの`Link`や`Chain`を順次呼び出していくようなネットワークを定義するときに便利です.`ChainList`を継承して定義されるモデルは,親クラスのコンストラクタを呼び出す際に,キーワード引数ではなく通常の引数として`Link`もしくは`Chain`オブジェクトを渡すことができ,`self.children()`メソッドによって**登録した順番に**取り出すことができます.この特徴を使うと,forward計算が上記のように簡単に記述可能となります." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "g735gZpbVh3-" }, "source": [ "#### 高速化のTIPS\n", "\n", "今回は多くの畳込み層を使う大きなネットワークを使うので,Chainerが用意してくれているcuDNNのautotune機能を有効にしてみます.やり方は簡単で,以下の二行を事前に実行しておくだけです.これを有効にすると,cuDNNが自動的に高速な畳み込みのアルゴリズムを選択するなどの実行時の調整を行ってくれるようになります." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "jI4IbE9WMq5t", "colab": {} }, "source": [ "chainer.cuda.set_max_workspace_size(1024 * 1024 * 1024)\n", "chainer.config.autotune = True" ], "execution_count": 38, "outputs": [] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "GLFm2waBMq5x" }, "source": [ "それでは,学習を回してみます.今回はパラメータ数も多いので,学習を停止するエポック数を100に設定します.また,学習率を0.1から始めて,30エポックごとに10分の1にするように設定します.\n", "\n", "本来は,以下の2行を実行することで乱数シードを固定し,100エポック分上で定義した `DeepCNN` というクラスが表すモデルの学習ができるのですが,これは40分以上の時間を要するので,今回は事前に90エポックまで学習を進めておいた重みを読み込んで,90エポック終了時点から学習を再開し,最後の10エポックだけ実際にここで学習を回すことにします." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "kAiXcG8jMq5y", "outputId": "017e69dc-647a-414f-da10-87a7676e348c", "colab": { "base_uri": "https://localhost:8080/", "height": 1000 } }, "source": [ "!wget https://github.com/japan-medical-ai/medical-ai-course-materials/releases/download/v0.1/DeepCNN_cifar10_snapshot_epoch_90.npz\n", "\n", "reset_seed(0)\n", "\n", "model = train(DeepCNN(10), max_epoch=100, base_lr=0.1, lr_decay=(30, 'epoch'), snapshot='DeepCNN_cifar10_snapshot_epoch_90.npz')" ], "execution_count": 39, "outputs": [ { "output_type": "stream", "text": [ "--2019-12-09 11:16:00-- https://github.com/japan-medical-ai/medical-ai-course-materials/releases/download/v0.1/DeepCNN_cifar10_snapshot_epoch_90.npz\n", "Resolving github.com (github.com)... 13.250.177.223\n", "Connecting to github.com (github.com)|13.250.177.223|:443... connected.\n", "HTTP request sent, awaiting response... 302 Found\n", "Location: https://github-production-release-asset-2e65be.s3.amazonaws.com/153412006/4fcc1200-eeb7-11e8-8ca0-9095e5bca078?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20191209%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20191209T111601Z&X-Amz-Expires=300&X-Amz-Signature=f2d9063e8a6ec0edd8567b4ae8caeebbd09f2d1e6eabc59db80bcd2c519f2787&X-Amz-SignedHeaders=host&actor_id=0&response-content-disposition=attachment%3B%20filename%3DDeepCNN_cifar10_snapshot_epoch_90.npz&response-content-type=application%2Foctet-stream [following]\n", "--2019-12-09 11:16:01-- https://github-production-release-asset-2e65be.s3.amazonaws.com/153412006/4fcc1200-eeb7-11e8-8ca0-9095e5bca078?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20191209%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20191209T111601Z&X-Amz-Expires=300&X-Amz-Signature=f2d9063e8a6ec0edd8567b4ae8caeebbd09f2d1e6eabc59db80bcd2c519f2787&X-Amz-SignedHeaders=host&actor_id=0&response-content-disposition=attachment%3B%20filename%3DDeepCNN_cifar10_snapshot_epoch_90.npz&response-content-type=application%2Foctet-stream\n", "Resolving github-production-release-asset-2e65be.s3.amazonaws.com (github-production-release-asset-2e65be.s3.amazonaws.com)... 52.216.164.75\n", "Connecting to github-production-release-asset-2e65be.s3.amazonaws.com (github-production-release-asset-2e65be.s3.amazonaws.com)|52.216.164.75|:443... connected.\n", "HTTP request sent, awaiting response... 200 OK\n", "Length: 56889445 (54M) [application/octet-stream]\n", "Saving to: ‘DeepCNN_cifar10_snapshot_epoch_90.npz’\n", "\n", "DeepCNN_cifar10_sna 100%[===================>] 54.25M 12.5MB/s in 5.4s \n", "\n", "2019-12-09 11:16:07 (10.1 MB/s) - ‘DeepCNN_cifar10_snapshot_epoch_90.npz’ saved [56889445/56889445]\n", "\n" ], "name": "stdout" }, { "output_type": "stream", "text": [ "/usr/local/lib/python3.6/dist-packages/chainer/training/triggers/interval_trigger.py:92: UserWarning: The previous value of iteration is not saved. IntervalTrigger guesses it using current iteration. If this trigger is not called at every iteration, it may not work correctly.\n", " 'The previous value of iteration is not saved. '\n", "/usr/local/lib/python3.6/dist-packages/chainer/training/triggers/interval_trigger.py:104: UserWarning: The previous value of epoch_detail is not saved. IntervalTrigger uses the value of trainer.updater.previous_epoch_detail. If this trigger is not called at every iteration, it may not work correctly.\n", " 'The previous value of epoch_detail is not saved. '\n" ], "name": "stderr" }, { "output_type": "stream", "text": [ "epoch main/loss main/accuracy val/main/loss val/main/accuracy elapsed_time lr \n", "\u001b[J1 2.62849 0.144931 2.22525 0.15625 27.9748 0.1 \n", "\u001b[J2 2.11316 0.210804 1.97533 0.266406 54.5483 0.1 \n", "\u001b[J3 1.87483 0.289396 1.8026 0.320508 81.0827 0.1 \n", "\u001b[J4 1.74066 0.340443 1.74728 0.358203 107.7 0.1 \n", "\u001b[J5 1.58789 0.409411 1.63916 0.40332 134.235 0.1 \n", "\u001b[J6 1.38757 0.492831 1.22399 0.561719 161.093 0.1 \n", "\u001b[J7 1.2036 0.566128 1.32939 0.553906 187.55 0.1 \n", "\u001b[J8 1.07527 0.617077 1.17079 0.589648 214.184 0.1 \n", "\u001b[J9 0.964984 0.660711 0.950063 0.67207 240.817 0.1 \n", "\u001b[J10 0.895905 0.688056 0.972697 0.657031 267.372 0.1 \n", "\u001b[J11 0.828796 0.715043 0.944733 0.686914 297.779 0.1 \n", "\u001b[J12 0.784123 0.731793 0.960205 0.687305 324.312 0.1 \n", "\u001b[J13 0.742033 0.748291 0.858308 0.719727 351.032 0.1 \n", "\u001b[J14 0.692516 0.76627 0.811853 0.725195 377.591 0.1 \n", "\u001b[J15 0.65644 0.776256 0.692374 0.767578 404.23 0.1 \n", "\u001b[J16 0.650682 0.780738 0.796731 0.733008 430.797 0.1 \n", "\u001b[J17 0.610249 0.793435 0.632162 0.791406 457.467 0.1 \n", "\u001b[J18 0.591896 0.803667 0.791757 0.739453 484.04 0.1 \n", "\u001b[J19 0.578718 0.804465 1.04659 0.671484 510.602 0.1 \n", "\u001b[J20 0.554954 0.814431 0.8127 0.733594 537.247 0.1 \n", "\u001b[J21 0.549188 0.814236 0.654926 0.787109 567.567 0.1 \n", "\u001b[J22 0.535866 0.820446 0.640323 0.788672 594.214 0.1 \n", "\u001b[J23 0.527765 0.823028 0.958373 0.70957 620.761 0.1 \n", "\u001b[J24 0.512286 0.830056 0.793664 0.748633 647.363 0.1 \n", "\u001b[J25 0.497195 0.833141 0.717548 0.759961 673.951 0.1 \n", "\u001b[J26 0.495153 0.835759 1.7557 0.511328 700.494 0.1 \n", "\u001b[J27 0.486062 0.837069 0.732518 0.775391 727.13 0.1 \n", "\u001b[J28 0.47963 0.839387 0.669157 0.786328 753.692 0.1 \n", "\u001b[J29 0.475502 0.838312 0.915904 0.718555 780.308 0.1 \n", "\u001b[J30 0.460236 0.844841 0.877713 0.72793 806.806 0.1 \n", "\u001b[J31 0.298483 0.897239 0.381921 0.879687 837.16 0.01 \n", "\u001b[J32 0.211182 0.92784 0.364046 0.882617 863.898 0.01 \n", "\u001b[J33 0.180429 0.937478 0.374651 0.883984 890.554 0.01 \n", "\u001b[J34 0.164156 0.943692 0.361041 0.888867 917.199 0.01 \n", "\u001b[J35 0.144584 0.950387 0.375391 0.889258 943.774 0.01 \n", "\u001b[J36 0.132288 0.954235 0.377427 0.890625 970.4 0.01 \n", "\u001b[J37 0.12103 0.957376 0.390434 0.892578 996.96 0.01 \n", "\u001b[J38 0.111974 0.961204 0.400307 0.886133 1023.62 0.01 \n", "\u001b[J39 0.102573 0.964476 0.399275 0.892773 1050.2 0.01 \n", "\u001b[J40 0.0972647 0.965931 0.432854 0.887109 1076.83 0.01 \n", "\u001b[J41 0.0928545 0.966597 0.418165 0.887305 1107.19 0.01 \n", "\u001b[J42 0.08498 0.96964 0.432462 0.884961 1133.75 0.01 \n", "\u001b[J43 0.0845448 0.970792 0.4365 0.880273 1160.37 0.01 \n", "\u001b[J44 0.0770674 0.973914 0.441935 0.883789 1187.02 0.01 \n", "\u001b[J45 0.0732439 0.974565 0.469901 0.881836 1213.62 0.01 \n", "\u001b[J46 0.070491 0.975962 0.453856 0.8875 1240.16 0.01 \n", "\u001b[J47 0.068846 0.97583 0.461264 0.881055 1266.75 0.01 \n", "\u001b[J48 0.0694101 0.976941 0.435111 0.885742 1293.25 0.01 \n", "\u001b[J49 0.0653772 0.977117 0.461284 0.882617 1319.87 0.01 \n", "\u001b[J50 0.0633419 0.97836 0.464232 0.889648 1346.47 0.01 \n", "\u001b[J51 0.0584663 0.979834 0.464193 0.885547 1376.6 0.01 \n", "\u001b[J52 0.0607617 0.979714 0.466352 0.881445 1403.21 0.01 \n", "\u001b[J53 0.0615791 0.978632 0.451807 0.889453 1429.69 0.01 \n", "\u001b[J54 0.0588031 0.979914 0.489054 0.881836 1456.28 0.01 \n", "\u001b[J55 0.0582368 0.979367 0.4719 0.882617 1482.83 0.01 \n", "\u001b[J56 0.0558719 0.981379 0.495846 0.878125 1509.45 0.01 \n", "\u001b[J57 0.0579962 0.979936 0.472415 0.875781 1536.06 0.01 \n", "\u001b[J58 0.0592009 0.9793 0.454762 0.88418 1562.6 0.01 \n", "\u001b[J59 0.0568546 0.980735 0.487556 0.876172 1589.17 0.01 \n", "\u001b[J60 0.0579785 0.980079 0.472908 0.883398 1615.93 0.01 \n", "\u001b[J61 0.0318918 0.98968 0.416953 0.895703 1646.15 0.001 \n", "\u001b[J62 0.0220127 0.993612 0.416859 0.899609 1672.69 0.001 \n", "\u001b[J63 0.0186169 0.99434 0.417849 0.898242 1699.29 0.001 \n", "\u001b[J64 0.0159041 0.995526 0.41804 0.900781 1725.78 0.001 \n", "\u001b[J65 0.0147089 0.995916 0.429896 0.899609 1752.39 0.001 \n", "\u001b[J66 0.0129457 0.996404 0.433748 0.898828 1779.01 0.001 \n", "\u001b[J67 0.0131643 0.996283 0.433923 0.898828 1805.54 0.001 \n", "\u001b[J68 0.0112659 0.996893 0.437222 0.901758 1832.17 0.001 \n", "\u001b[J69 0.0106502 0.997151 0.443475 0.901758 1858.73 0.001 \n", "\u001b[J70 0.0107926 0.997203 0.445066 0.900391 1885.34 0.001 \n", "\u001b[J71 0.0105973 0.997062 0.44159 0.898633 1915.8 0.001 \n", "\u001b[J72 0.00934292 0.99767 0.450084 0.897266 1942.45 0.001 \n", "\u001b[J73 0.0104884 0.997092 0.451691 0.899023 1969.06 0.001 \n", "\u001b[J74 0.00849317 0.997707 0.450391 0.9 1995.61 0.001 \n", "\u001b[J75 0.00846932 0.997891 0.451362 0.902148 2022.21 0.001 \n", "\u001b[J76 0.00826699 0.997841 0.448779 0.900781 2048.69 0.001 \n", "\u001b[J77 0.00875069 0.997492 0.45095 0.900391 2075.31 0.001 \n", "\u001b[J78 0.00823296 0.998019 0.449194 0.898438 2102.1 0.001 \n", "\u001b[J79 0.00701245 0.998113 0.454196 0.899609 2128.74 0.001 \n", "\u001b[J80 0.00846517 0.997596 0.455877 0.901172 2155.29 0.001 \n", "\u001b[J81 0.00677115 0.99818 0.459518 0.899805 2185.54 0.001 \n", "\u001b[J82 0.00717393 0.998047 0.465337 0.899805 2212.13 0.001 \n", "\u001b[J83 0.00709802 0.997908 0.464472 0.898828 2238.69 0.001 \n", "\u001b[J84 0.00699702 0.998091 0.470595 0.899219 2265.27 0.001 \n", "\u001b[J85 0.00746627 0.997975 0.470063 0.901172 2291.78 0.001 \n", "\u001b[J86 0.00666763 0.998069 0.466201 0.899414 2318.38 0.001 \n", "\u001b[J87 0.00616266 0.998531 0.462948 0.9 2344.86 0.001 \n", "\u001b[J88 0.00719447 0.997847 0.463587 0.899609 2371.48 0.001 \n", "\u001b[J89 0.00638493 0.998335 0.465655 0.901367 2398.08 0.001 \n", "\u001b[J90 0.0061445 0.998286 0.464918 0.900586 2424.59 0.001 \n", "\u001b[J91 0.00582547 0.99838 0.46484 0.900977 2439.32 0.0001 \n", "\u001b[J92 0.00602776 0.998331 0.461773 0.901367 2452.62 0.0001 \n", "\u001b[J93 0.00597372 0.998491 0.464172 0.900195 2466.17 0.0001 \n", "\u001b[J94 0.00619668 0.99813 0.46446 0.900391 2479.48 0.0001 \n", "\u001b[J95 0.00545569 0.998557 0.466654 0.900977 2492.64 0.0001 \n", "\u001b[J96 0.00613322 0.998308 0.465335 0.900781 2505.78 0.0001 \n", "\u001b[J97 0.0054181 0.998624 0.465642 0.900586 2518.9 0.0001 \n", "\u001b[J98 0.00512285 0.998801 0.467116 0.900781 2532.13 0.0001 \n", "\u001b[J99 0.00562234 0.998576 0.464966 0.901367 2545.35 0.0001 \n", "\u001b[J100 0.00551726 0.998624 0.462725 0.901367 2558.63 0.0001 \n", "Test accuracy: 0.8966574\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "g73am7hvVlQa" }, "source": [ "**ゼロから学習する場合:**\n", "\n", "```python\n", "reset_seed(0)\n", "\n", "model = train(DeepCNN(10), max_epoch=100, base_lr=0.1, lr_decay=(30, 'epoch'))\n", "```" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "OK1P287rMq51" }, "source": [ "学習が終了しました.学習曲線と精度のグラフを見てみましょう." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "W67QavgIMq52", "outputId": "23557adb-6a73-411c-d2eb-941c0f9e76fd", "colab": { "base_uri": "https://localhost:8080/", "height": 279 } }, "source": [ "Image(filename='results/DeepCNN_cifar10_result/loss.png')" ], "execution_count": 40, "outputs": [ { "output_type": "execute_result", "data": { "image/png": "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\nYII=\n", "text/plain": [ "" ] }, "metadata": { "tags": [] }, "execution_count": 40 } ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "FnEM3DmzMq56", "outputId": "37ff1921-f622-4f7c-82b9-46acf6b9c6ff", "colab": { "base_uri": "https://localhost:8080/", "height": 279 } }, "source": [ "Image(filename='results/DeepCNN_cifar10_result/accuracy.png')" ], "execution_count": 41, "outputs": [ { "output_type": "execute_result", "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgQAAAEGCAYAAAAaIo0AAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0\ndHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nOzdeVxWVf7A8c/zPOyrAqJsyuaKgqik\noSJqZVo5WWmmaU6laZnTNFvTNk5j20zTWNkvs6nMLduzprSyRFPc9w0FBAVEZVFkkeVZfn8cngUF\nAUFBnu/79er13Hufc889F4zzveece47GZDKZEEIIIYRd07Z0AYQQQgjR8iQgEEIIIYQEBEIIIYSQ\ngEAIIYQQSEAghBBCCMChpS7s5+dHaGhog9OXlpbi7u5+9QrUStnjfdvjPYN93rc93jM07b4zMzPJ\nz89v0vWrqqrIzs6mvLy8SfmI64uLiwvBwcE4OjrW+n2LBQShoaHs2LGjwemTkpJITEy8egVqpezx\nvu3xnsE+79se7xmadt8DBgxo8vWzs7Px9PQkNDQUjUbT5PxE62cymSgoKCA7O5uwsLBa00iXgRBC\n2Jny8nJ8fX0lGLAjGo0GX1/fy7YKSUAghBB2SIIB+1Pf71wCAiGEEEJIQCCEEOL6sWPHDubMmdOg\ntDNnzmTTpk1XuURthwQEQggh6rRwfTrJ6TXfakhOz2fh+vQWKc+AAQN48803G5R2y5YtDBo06CqX\nyEqv11+za10N9QYEDz74IP7+/vTu3bvW700mE3PmzCEyMpLo6Gh27drV7IUUQojm0Noqt+tBdLA3\ns1fstvzcktPzmb1iN9HB3lecZ2ZmJj169GDatGl069aNyZMns3btWgYPHkzXrl3Ztm0b27Zt48Yb\nbyQ2Npb4+HiOHDkCqDc0br/9dgDmzp3Lgw8+SGJiIuHh4TUChcOHD9OtWzd0Oh3vvfcecXFxxMTE\ncPfdd1NWVgbA6dOnGTduHDExMcTExJCcnAzAkiVLiI6OJiYmhilTpgAwbdo0Pv/8c0v+Hh4elvIM\nHTqUsWPH0qtXLwDuvPNO+vfvT1RUFIsWLbKcs2bNGvr160dMTAwjR47EaDTStWtX8vLyADAajURG\nRlr2r7V6XzucNm0as2fPZurUqbV+v3r1alJTU0lNTWXr1q3MmjWLrVu3NntBhRCqQosO9iY+ws+y\nDbBowzFmJIQ3eXtfdhEAOi0YjOqazX0N2+3Xd1zAKST/mpVv9YFc3l6XxpyRkWxKK2BwpC9v/pxG\neAf3ZrnPhpbv+2OVJCaqynVfdhEzh0XQUv7+7UEOnTx/2TT+ns5MfX8bHb2cOX2+gkh/D95Ym8ob\na1NrTd8r0Iu/3RF12TzT0tL47LPP+OCDD4iLi2PFihVs3LiRb775hpdeeoklS5bw66+/4uDgwNq1\na3n66af54osvLsknJSWFdevWUVxcTPfu3Zk1axaOjo6sXr2aW2+9FYC77rqL6dOnA/Dss8/y/vvv\n8/jjjzNnzhyGDRvGV199hcFgoKSkhIMHDzJv3jySk5Px8/OjsLCw3p/hrl27OHDggOV1vg8++AAf\nHx8uXLhAXFwcd999N0ajkenTp7NhwwbCwsIoLCxEq9Vy//33s3z5cp544gnWrl1LTEwMHTp0qPea\nV0O9AUFCQgKZmZl1fr9q1SqmTp2KRqNh0KBBnDt3jtzcXAICApqznELYlboq/uMFpSzacIxZieEc\nLyjl7XVpAMwZGckjS3c2efvdKf05eLKIl75L4enbehAV6H3Zc0wmE4+P6KqOm+pOMysxghlLdgIm\nZg6LsKS5rYvOkmb60HBLmlnDrOkfGx5p2f7PhFiOnD7Pq6uP8qdR3egR4GX57qEhYUxfsgNM8Nv4\nUOv5iep8k8nEbweHcuRUMS9+l0KYnxtJR/Jw1mkYEuFX41zz9tQbu1i2ZySEM33JTjCZmDyoC9M/\nUvOo2KZ/5raepJ4uYXFyJlNv7EKEvwcPf7QDTCYmDexi2X6ot6PlSXvBpNir8m+oOXm7OtLRy5mc\nc+UEtXPB27X2iW0aIywsjD59+gAQFRXFyJEj0Wg09OnTh8zMTIqKinjggQdITU1Fo9FQVVVVaz63\n3XYbzs7OODs74+/vz+nTpwkODuaHH37gww8/BODAgQM8++yznDt3jpKSEkaNGgXAL7/8wpIlSwDQ\n6XR4e3uzZMkSxo8fj5+fHwA+Pj713ssNN9xQ493+N998k6+++gqArKwsUlNTycvLIyEhwZLOnO+D\nDz7Ib37zG5544gk++OADfvvb3zb6Z9lcmjwxUU5ODiEhIZb94OBgcnJyag0IFi1aZGk+yc7OJikp\nqcHXKSkpaVT6tsIe79se7xngq5QSDhf8TE9fHaYCA4+sLWdMmCNZJUbm/2jAZII7uzrS3cvIi9+l\nEOKh4UKFCYDlvx6htMKEBvgg6Qil5SY0Gus2wIKfUiipVNea/0MKpXrQAP/5IYWy6u0Zi7dSWgUO\nWnjxuxQcNKA3qe9eX5PCBYM6/8XvUizlfnm1dfvF763br3yfgkFdmn/9cNRy/LUfrdufHDGhSg3/\nsXna/JdNmlfXHLFsT19qnczsnzZ5Arzxc5ple0GStQvg1R+s5y9YZz2eka+ajSsMJt62SW977jvr\nj1m2bcu3aMOxWtM//dUBy/ZHm4/XKN9/N2ZYtn/OLGfxga082teFyqwDJGXRYup7kgdrN8GcEZEs\n23qC393UlfgIvyZd19nZ2bKt1Wot+1qtFr1ez3PPPcfw4cP56quvyMzMrHMiJ9t8dDoder2esrIy\nzp07R2BgIKBaur/++mtiYmJYvHjxFf19cXBwwGhUzT5Go5HKykrLd7azTiYlJbF27Vo2b96Mm5sb\niYmJl333PyQkhI4dO/LLL7+wbds2li9f3uiyNZdrOlPhjBkzmDFjBqAGhjRmpi6Z0cx+2OM9Axwu\n+Jn3Dhl5aVwv/Dz0BJ04xidHS2qk+eSI9Skpq0RVpTqthszzJjycdThoteSWVtHezRETkFtahb+n\nM446DTnnygnzc0enhbQzpXTrqPpAj54uoWtHD0wmSDtTQo9OntwQ5sOBnCJ2nThHrwBPqgwmUs+U\nEB3kjYNOw64T5xgY5oMG2JJRyMAw9bSzNaOQfp3bYTCa2JtdRFxoexy0WjYfK2BIpB8aDfyams+g\nMB/0RhM7jp9lYJgPjjotG9PySejqhwmVZnCELyYgOb2A+AhftBoNG9PyGRLpx7BuHVh35AzJ6Spf\ngI1p+dzU0x+dVssPB0+R0NWPKoOJzccKSOjqh4NOyy8pZ4gNaceBk0VUGUw4O2jpG9KOrRmF3NTT\nH4C1h89wc6+OaDXww8HTjOzpj8FoIulIHiN7+OOg0/DDwdOMiuqIwQhrD5/mll4d0Wk1rD5wijui\nA7i7fzBf7c5h1Z6T3B4dgNFk4vv9pxjTJwAN8N3+XOaMiGTWLd2v7j+qZmDbkhEf4cegCN8a+1dL\nUVERQUFBACxevLhR565bt47hw4db9ouLiwkICKCqqorly5db8h05ciTvvPMOTzzxhKXLYMSIEYwb\nN44nn3wSX19fCgsL8fHxITQ0lJ07dzJhwgS++eabOlssioqKaN++PW5ubqSkpLBlyxYABg0axKOP\nPkpGRoaly8DcSvDwww9z//33M2XKFHQ6XWN/VM2myW8ZBAUFkZVlDW+zs7MtP2whrge2A83M28np\n+Uz7cFuzbC9cn87C9em892u6Zbu2dMeKDNzVL4iZy3bxp8/3ceRMCaG+bgCM7OnP6N6d1HYPf9q5\nOTJ7eAQeLg64OumYMyISjUaDwWRizohI9EYTBqPavlBl4Hy5njkjIskvqeD0+QrmjIgkt6ic3KJy\n5oyI5FRROafPq+0zxRWE+LiSWVDGnBGRZJ29wKnq7zIKSkk9U8KcEZEcyj3Pwdzzlu1D1dupZ0o4\nll/KnBGRpJwq5sDJIuaMiGRv9jn2ZJ1jzohIDuae58jpYsZGOHIo9zx7s9Xx3VnWNPtyitifo87d\nn1NkSXMo9zxoTKScKrbka/5ua0Yhyen5lrzM196ddY7tmYWMiw1kT9Y5HLQa5oyIRKuBbRmFjIsN\nYmtGIVszCpkzIpItxwpITi9gzohItmUUsvP4WbWdWWg5npxewNYMtb35WAEb09R1N6UXkHqmmF9T\n1f76o3mW7V9T89iQmsfYCEeWbT1xyQDH1mhfdlGNyj8+wo8Fk2It4yWulj//+c/89a9/JTY2ttGj\n923HDwD84x//YODAgQwePJgePXpYjr/xxhusW7eOPn360L9/fw4dOkRUVBTPPPMMw4YNIyYmhief\nfBKA6dOns379emJiYti8eXOda1Hceuut6PV6evbsyVNPPWV5y6FDhw4sWrSIu+66i5iYGO69917L\nOWPHjqWkpKRFuwugGVoIxo4dy4IFC5g4cSJbt27F29tbxg+Iq862j928f6UDzZq7X95oMjH5hs7M\nWLITDfDu1Nr75W37300mE4FuJo4ezUADmIA7+way/qiqSD5MzgRgXGwgX+8+acnH3Czt6Wr9X7kp\n24MifPF0dahRVvO1m+satttuNn+BrkX5ii5U4eKoxUGnxdPVAQedFheg6EJlvec2Z/l6+uiYOCLm\nmjxpN1VtAx7jI/yaVObQ0FAOHLB2r9i2ANh+d/SotVto3rx5ACQmJlpaEOfOnVsjX/N5ycnJ/Oc/\n/7EcnzVrFrNmzbqkHB07dmTVqlWXHH/ggQd44IEHLklrftoHePXVVy8pD6gujNWrV1+SJ8Do0aMZ\nPXr0Jcf37t1LTExMjWClJWhMJpPpcgnuu+8+kpKSyM/Pp2PHjvz973+3NJXMnDkTk8nE7NmzWbNm\nDW5ubnz44YcNWnxjwIABsrhRA9jjfdvec12D677de5IfDp5mVmI4BqMa1V3XQLg3q/uWHx8eyZu/\npGEymZh4Qwgfb8sCk4nHR3bl4Mnz/G9fLuF+7hwvLMVkAi9XR86XVYEGOng4k19agUajoZu/J0dO\nn1dpXBw5f6EKjQb8PNUI7It5OjtQVmmgk7f63svFgcKyS5sbNYCjTouzo5abevrXqPjN93N7dADh\nHdx5J+kYo6I6ckeM6iO9Xt8yeOWr7Tw1Lq7Vlu9q/fy+Xr+Lfz54yxW9ZdDYv521OXz4MD179mxS\nHqJ5vPLKK7zzzjssX76cIUOGXPXrXe53X29AcLVIQNAwbfm+66rsbSsJ24r/WF4p/9uXC6jR8LtP\nnOW1H47SK9CL9LwSegd6sy+nCH9PZ3LOXsAEOOo0VFWPbDM/edfHx90RD2dHThSWEenvjskE6Xml\ndPB0orzSSHGFHj8PJ9ydHTheUEaYnzt6g5GssxfoHeRFO1cnNqblM6xbB0rK9ew8cZbwDu4EtXMl\n/UwJJ4vKiQn2xs3Jgc3HCmr0ubs4avlgWhz7sovQabmk4jdXHq3hdbXm0Jb/fV9OU1c7lIBAXKnL\n/e5bbPljYZ9sgwDzhCcXN9WbX0UDVfF39HThxe9S6N7Jk/JKAybgdx/vJq96yPzBk+fRaiAtrwRn\nnZbssxeI6OCOu5MD+3KKiAn2xmSCfTlFDO3qh5uTjh8Onub26AC0Gg3f7D3JLb06sj2zkCmDuvBh\nciZnyyprNNVbtjXW7Qp97WmOU3bJ8WVbT3DfDSEcPHm+9nyBnj5assvUsB5zRR8V6M2+7KIa/bfm\nz9bczCyEuP7I1MXiqrMdtGcOAt77NZ192UXMGhbOS9+lkHamhAq9kfIqA79m6ymr1FNWYWDm0p3M\n/1m97nXkVDEOOg3ero7klVTSvaMHni4OPJIQTjs3Jx4bHoGjg9YyMC6jQA1sO5Zfatnek3XOMihs\n/dE81h05w7jYQH46dJpHh0cwKMLXUu7m7Jeflajuc1ZieJ3XGBvhxLtT+teYFS4+wu+6bwUQQlwf\npIVAXBV1tQQYjDApLoQXv0sh0NuF3KJyTMD2zLMAOGo15JSa6ODhhKODlpPnyokK9CKrsIz7B3Vh\n6ZbjVBqMNQbXTR8agZ+n0xUPNHNx1PH0bT0szfPvTukPqD7f5tg29ys/fVsPDEa1X1u6r9fvYpbN\nCG5pARBCXEsSEIhmU1cQUHRBT2K3Drz4XQoezjpKKtTsNieLyglp70phaSW/iQ3imz05aDQaRgdp\nWJdjpFxvvGRU/dItalS9bSUeFeiNwVh/hXu5Cnv60Ig6m+ebc/titt9VZjlZjkkwIIS41iQgEE1S\nWxAwIyGMzPwyIju415jRTquBkgoDfYK8OFF4gRE9OtSo7L/dexKo+SpaXU/vF1fidTWrN6bClopY\niNbJw8ODkhLrJF2jR4/mvffeIzg4uEn5xsfHWxY0upyVK1eSnp7OM88806TrtXYSEIgmMQcBCybF\nEhPcjphgb15ZbZ0q1t/TmTPFFQzr5se+7CISu1uDAPVU73VJZf/KV9t5d4p6y6C+p3epxIW4yjbO\nh6B+EJZgPZaxAXJ2wZAnrnlxLly4QEFBQZODAaBBwQCoiY7mzJnT5Os1hsFguOazFsqgQtFotoME\n4yP8+Nc90fz2w+3E/P1H1h3Jo6OXmlt8bHQAeqOJcbGBbDiaz6PDI+jeycvyxB8d7M30oREsmBRL\nF193S+X+5ABXy7b5yV8G1wnRQoL6wWfTVBAA6vOzaer4FXrqqad4++23Lftz585l3rx5jBw5kn79\n+tGnT59aJwyCmq9shoaG8te//pW+ffsyYMAAdu3axahRo4iIiGDhwoWAWhulrnxtlzBOTEzknnvu\noUePHkyePBnzG/kmk4k9e/bQr1+/OpdkNhgM/PGPf6R3795ER0fz1ltvAbB9+3bi4+OJiYnhhhtu\noLi4mMWLFzN79mxLGW6//XbL2goeHh784Q9/sMyG+MILLxAXF0fv3r2ZMWOGpUxpaWncdNNNxMTE\n0K9fP9LT05k6dSpff/21Jd/JkyfX+TOsi7QQiEYztwq8eGdvDpws4sONGVTo1Swsw7r5sT/nfI2+\nf9uWAPOsbLZP/PKUL0QLWv0UnNp/+TSeAbB0nPoszoUOPSDpVfVfbTr1gdGv1JndvffeyxNPPMFj\njz0GwKeffsoPP/zAnDlz8PLyIj8/n0GDBjF27Fg0Gk3N4q5ezZ133mnZ79y5M3v27OH3v/8906ZN\nY9OmTZSXl9O7d29mzpyJi4sLX331Vb357t69m4MHDxIYGMjgwYPZtGkTQ4YMYffu3cTExKDRaOjR\no0etSzIvWrSIzMxM9uzZg4ODA4WFhVRWVnLvvffyySefEBcXx/nz53F1db3sj7m0tJSBAwfy73//\nG4BevXrx/PPPAzBlyhT+97//cccddzB58mSeeuopxo0bR3l5OUajkYceeoj//Oc/3HnnnRQVFZGc\nnMxHH3102etdTAIC0SC2YwVuDPflnn7BzFq+C1Ar47k56RgV1VGCACHaIpd2KhgoygLvELXfBLGx\nsZw5c4aTJ0+Sl5dH+/bt6dSpE7///e/ZsGEDWq2WnJwcTp8+TadOnWqcu2nTJl577TXL/tixYwHo\n06cPJSUleHp64unpibOzM+fOncPd3Z2nn3663nxvuOEGSzdE3759yczMZMiQIaxZs8Yy3XBdSzKv\nXbuWmTNn4uCgqlQfHx/2799PQEAAcXGq+9PLy6ven4tOp+Puu++27K9bt45//vOflJWVUVhYSFRU\nFImJieTk5DBu3DgAXFxcABg2bBiPPvooeXl5fPHFF9x9992W8jSUBASiQcytAq/eHc3Xe3L4bl+u\nZeY/B52W/z4wgH3ZRRIECHG9ucyTvIW5myDhz7DjfUj8S80xBVdg/PjxfP7555w6dYp7772X5cuX\nk5eXx86dO3F0dCQ0NPSSZYOPHTtGSEgITk5OlmO2yyZfvKSyXq9vUL62+YB1GWWAH3/8kS+++AKg\nwUsyX47tMspAjbK4uLhYxg2Ul5fz6KOPsmPHDkJCQpg7d+5ll1EGmDp1KsuWLWPlypV8+OGHjS6b\njCEQDRIf4cerd/XhkaU7+H5fLk46LR4uDgyO8MVRZ51dzzwmwPzuvfT9C3GdMwcD4xfDiGfUp+2Y\ngit07733snLlSj7//HPGjx9PUVER/v7+ODo6sm7dOo4fP37JORevYtgQDcn3cufq9Xp8fX0t+7Ut\nyXzzzTfz7rvvWoKIwsJCunfvTm5uLtu3bwfUEsx6vZ7Q0FD27NmD0WgkKyuLbdu21Xptc+Xv5+dH\nSUkJn3/+OQCenp4EBwdbxgtUVFRQVlYGwLRp05g/fz6guhsaSwIC0WBHz5RgNKlWAa1WTSu8fPog\nmV1PiLYsZ5cKAswtAmEJaj9nV5OyjYqKori4mKCgIAICApg8eTI7duygT58+LFmypNaV/9asWdPo\ngKAh+dblp59+4qabbrLs17Uk88MPP0znzp2Jjo4mJiaGFStW4OTkxCeffMLjjz9OTEwMN998M+Xl\n5QwePJiwsDB69erFnDlz6Nev9sGZ7dq1Y/r06fTu3ZtRo0ZZuh4Ali5dyptvvkl0dDTx8fGcOnUK\nUCsy9uzZ88qXUTa1kP79+zcq/bp1665OQVq51nLflXqDqe/ffzBF/PU706RFm029/7bGtCktz/L9\nprQ80ztJac1yrdZyz9eaPd63Pd6zydS0+27s387aHDp0qMl5XGvl5eXNcu+N8dBDD5k2b958Ta/Z\nFKWlpabw8HDTuXPn6kxzud+9tBCIBnnj51TOllXxxE1dpVVACHHNOTs7N3mVx8b673//y6BBg67p\nNa/U2rVr6dmzJ48//jje3t5XlIcMKhQN8uWubDp6OfNoYiSgAgCZc/8qqmsymE1vwuA56rg5DVgn\nibl4whjbfGzTm/O53LmXK1NdedWVbx3l7rPvBeiibVyZGluOa7ltbkbXOoCxukm5lvKFnPgSSGzR\nCX5E23LTTTc1anxEbSQgEHUyv2ro5uTAyXPl/O2OXmzJKLBMFSxvDTSvkBNfQoZWVXTmyWCGPAnH\nkiA8ETa+rvbNxwsz4Ff1vjK974LkBSpNzzusA74KMyD5zUvTD/sLrJx86bnjF6tKtrYKrSF51ZVv\nHeU+G3w3vvWda3s/ObtUeVZOhqi7oM/dtV+7pbYnLofcffDjs3DLPAiIrjVdcY8/1Rys1wJMJtMl\n7+KLts1UPbFRXSQgEHUyv2rYo5MnHs4OdPZxs0xT3CgNedq1OW55erIzxZ6R1goiLAEGP6EqlsC+\n6nPk3yDqTjhzGH58Bjr0BH0FaLRQeAx2fgTxc1Ql9PF9KtObX4CyfJXetT1UVs8Hv3kBVJWpc7N3\nws7FMHAW+PeC3L2XVmhGA9z0vAoSzNeuKgOTUf1+K0tVXge/gqpy0Gggd78qU8Ifoe8kKDmj8g0Z\nqMqNkU6nflHptVo4sRkMlYAG8o6qcwc9BgEx6n5MJhj5PKT9rM7ZsxzOHFLnaLQqWDBUqvs7vqn6\nuEYFVFUXABPs+khtazRw6OvqbWDPCnU/YJNGC2lrq3/GwJHvrefuW2k998AX1uM/z4NTe6HzjfDL\nP8C3qzXfHe9DVSmgISD3R0idX3Ow3jXk4uJCQUEBvr6+EhTYCZPJREFBgWXegtpoTPWFDFfJgAED\nGtUfZDtdpT1p6fv+ft9JHl2xm77B7Thxtswyv4BFQ5pv938BKd+qp0OjvubTr/mpNGeXeird+Don\nvfsTeMvj6tyGNmfbauzc6w1Jfw3mc09KSiKxixZWTgKvYMhLQb3T0QwcXEBfDj7har/wGLj5QUUx\nGCouTe/STgUPDq5QWVx7nm6+4OYD+ang0UnlVVWKennJWPs5tZWpoelr0IKTe91lu5hGCy7ecOEs\nOHmoSt5YBTpn9e+uqhRcfdR26Rmbsl2cjw50juo7R3cVEOkvgNZJbZv0Kg8HVxWQGCpq5uvRUeVT\nclq90z+i8YvlNPZvZ22qqqrIzs6u97120ba4uLgQHByMo6Njrd9LC4G4rJJKtVTxwNylTO47VAUD\nthV/Xc3ICX9WFZvRqAKDoP7qydKjI1SWwX0rVOXqEw7L7lF/pC8Uwi3zOHPaSGBdzdlw2dYFS5Oy\n7ZO2uWnW3PR8cfBiew+2zfO21zOnuVyeF5ejrn5v23S292EyqWMVxZB3GNqHQmkBdL8VjqwGnzA1\nxWzESDi5G+Iegi0LARP0GguHvwX/3pC1GbpVv5p1dA30uANOJKvWg60Lrb+frQvBwRkGzVItBJ36\nQOavEDxQXStrC5zNhC6DVYBw5DuIvBlydsCAB2Hbe1B82pqXVmfdBug7WT3F+3WFnJ0QciOcOQh9\nxsO+T0GjITNoLKGn1qh76DMB9q5UT9p9xqsn70591NN+j9tVpXroa4h7GHrcBl88DAP/BFvfUT+7\n3nfBgS/V+X3vg90r1BN87FRVDqPBWj5HVxj4+0t/Hka9dVvnBP2nwY4PVZ43zIBti1R6y89SB/GP\nW/MZOFO1BJiD3QG/uzRfILPLBEJ3vA9hQ1ukhcDR0ZGwsLBrfl3RuklAIOq2cT5pe1zREExE36Hc\ndPApMlyyCTOdtFb8dy6EskJV2Tt5Wpukf3oey1Nf0svqU+esnowAdiyGzI2qsjdUwIXqp9S1f6Oz\nd2/QV6o/5rn7VNNx4l9VJZu779I+aaMezmaoymDicvUHdsy/Yfl49RRbUayOgzrnxsdrBi8Tlqmn\nvB+fUU+GaT/BgIche4f1euMXqz/eS8epp02tDu77RFUUtfX12wYTlwtSzPdx94d0TX0XTq5W54Ul\nQsZ61WwfP1v9nH58VuWf/ou1OX/ru4AGYu4D/yiVJvpeFUCA2t73qU366orLxWYUcuRIcO9gPTdt\nrQow0n6qWcFfnNe29y7Ny3a7xxjwDraW+9h667n7PwNA7+BenVijgkNt9epuve8C38hL78dcnn2f\nWn+n295V/1Y69LCe3y7Uuu1tsypeXWWta9ujo/odg+pyqS992FC1b9vlUsvP/Fy7PpA4pea/CSFa\nmAQEok4HiOCRvFnoA59lwj2PkMU+Qne+REn7XniY+2Q/vV81lTp7QcV5VSlpdXBqn3qSdfaAQ6vU\nALCM9dBzEuxeCgfVVKBoHVTT74CHYPv7oNHgc3aPtRAnq0dtJ72kmmH1F2DQo3DjY1BWoCpxn3Ao\nylbNudk71BPdoa9Vuc7nqBvDoTcAACAASURBVONnUsCjg6r4fp6rrmsyqc8vH1bNueZ7QAM7/gta\nR9WsHDMJsraphVzMA+0MqKDnprmqleDHZ6FjL2tFYBu8mP/g974bltyp0p09bg1e2ofC8rsIMud9\nyzz1NNv1ZnU+qM9b5qmg45Z51sF25krR3C1zyzzVhG/m6Fp7+k1v1n6uUQ+domuv0BqSV1351lHu\n9t/Orf9c2/sJG6p+Vwe+VPs5u+ovx7XcNr9lYP5Z1lE+z18/h7A51u4yCQhEKyBjCFq5lrzvl78/\nTOrGz3nP+Q01v7Ztn6rOWVX2ZQXQ9RbVJDzgoZpNp+bt7qOtT5bxs9XT8fLx1f2wrjDpU/UHsfop\n+EyHG/Ev2q+e+vpOgT3LVKWfuwfMKyjonKwDyC6mc1bBgIMTdIpRzeUWGjXQq+Co6kMvU/MoEDIQ\nCtKqA5P/qqfNE8nWoACq+4ZdYOAjkPw2GGrrf9WCzgEC+0HWVjWor/8D8OUjcHS1TTF08Ju3ofgk\nbHjNOvAs+l64a5E1XX3dI/W9XtiQMRgXd2fU9ZZBY8dzNGDcRZ3/vptyP9eBpvx/3RxjCISojbQQ\niDqF+rlzEEd0pirQV0HQAFVp9p8GOz4AQ1XDmqRtnywDotUxnZNaPa2sQO1nbLA8BVftX29tpu0x\nGryDrE3HqT+BTwTkbIfA/lCYDjdMV+W5+R/qSXT/p+qa961UFcqR1fDJFFWx9xkP6T9bm56dPaHb\naNWEbQ5YzE2+5ubzTtFwbJ0aTHbfxyrP8ERrUBMxQlVO3W+Fg1+rcYBZW1T5f3oOfpmnukU6x6uB\ngh2jVF/91zNVGq0DOHmQGTCG0LS1NcckhCXU/vR48XHbitF2u758Lk5f235j8qovnys5t7H3I4S4\nIhIQiDptTi9gpEuKGgrQfYyqWM0V/44PVKKGNCPn7FIVbUC0tSnY3FxuOzivumm9PO1o/c3Z4YnW\nPun42Sov80DEsGFq0J2Zk7sqZ/ue1orfErxowMnNeg9gbZ63vV6naDXAzpbOCfy6Qfo6azk69lHp\nu94Cx5PBKwjyj6jBeCd3wYSPVFn3fw5fPaKuUR1oZB43Eir9ykKIFiIBgaiVyWSiMi2JSabqZu6A\nGDXa/OKK37ayt+0Lta3MbI9dbqGU6mNZne8iwvy9bXpz8HBxn7S51QHUWIWxb9QctLfxdVXenF3q\nqf9y97CpljcJzMHBxa9LXpwn1AwmwoZZWxoOfwvDn7Het4c/OLqpQY/mVpI6fh5CCHEtSEAgapWe\nV0qX8iPkdh5O6Jmf1SxrGk3dFf/Vaka2TW8bHMTPVsfM5QFrq4M5z/GLa1bw5u8aeg8XBy9w+Twv\nF0zE3q/2zcHLZ9MuaSVp1/UJIFGaw4UQLUICAlGrzccKeNdwB7O9v4bSDtY+/ZasrBobTDS0/705\nrtfQYMIcvNTSSuL56+f1l0kIIa4SCQiEhXntgvgIP7akFxDg7YL+/BnOmLzwb+nCXW+uIHjJOm5E\n1osUQrQUWf7YDi1cn25ZttgsOT2f4wWlaknjtHy2HCsgsoMHuSdP4Ogp4YAQQrR10kLQhtk+8Zu3\nAY4XlLJowzFmJYazKa2AwZG+vJN0jAWTYrkjOpCHPtrBhSoDu06cJcLjAs4dglr4ToQQQlxtEhC0\nMbZBgHm1wlmJ4RwvKOXtdWkAvDulPwHerrz0XQpdO3rw4ncpPDg4lIoqIy+vPsyFKrV+wX1xITjv\nKVAz/AkhhGjTJCBoA+oKAsorjdwRHcCL36UQ7udOWaUekwke/mgHZdWLFh09rdYe+GBTJh9sykQD\nODtoeWhIGP/blsKzxko13a8QQog2TQKC61RtQcADN3Yh7UwJXXzcePG7lBrpj+WX4uPmiJuzA9ln\nL9A70IvjhWX8JiaQb/aepFegF1uOFeLsqOWDaXHER/hxU8diWAVHS13p1kL3KYQQ4tqQQYXXEdvB\ngOYg4L1f09l2rJAenTz5z9pUvt2Xy+6sc/h7OgMwKNyHdq6OPD4ikiqjiaILVYyLDeTgyfPMGRnJ\nvHF9eHxkJFuPFRIV6IWjzvpPop+Pmsv+aInLtb9ZIYQQ15S0ELRCtk//3x+rxClEBQHmwYAzE8Ip\nKK0ksVsHXvwuBQct6I0Q3N6V7LMXuLNvIBtS8xkXG8jXu0/y9G09iAr0ZnFyJgAujjqevq0H7yQd\nA+CdpGM8fVsPDEZroLFgUizxFXkA3D4outZyCiGEaDskIGiFbCvlMG8djyzdCcAbE/uSd76Cl1Zb\nuwM0qGBgRI8O7MkqqhEEGIzw9G1evJN0jFFRHXl3Sn8A9mUXMX1oBFGB3izaoN4uiI/ws+S5YFIs\n+7KLiHc7ow54yGuHQgjR1klA0ErYtgrER/jx2vhopn24HTedkfIqDWhg1rJdVOiN+Hk4kV9SyfDu\nHdiTdY7E7h1qDQLMFX1UoLeq4KsrfdtP20DAzHI86TN1wM33mv0chBBCtIwGjSFYs2YN3bt3JzIy\nkldeeeWS70+cOMHw4cOJjY0lOjqa77//vtkL2hbVNSbghW8P8syXB6jUGzlXATqdBq1GQ4XeyLBu\nfhhNMC42kKQjeTw6PILunbwsXQDRwd5MHxphecoHVcHPHHYFc+CVnAFXH7UanxBCiDat3hYCg8HA\nY489xk8//URwcDBxcXGMHTuWXr16WdLMmzePCRMmMGvWLA4dOsSYMWPIzMy8muVuE8xBwEvjetPF\n153b+qhXBLWoFYfdnHTcFKJlXY4JgDF9OjW4JaCup/9GKc2TVw6FEMJO1NtCsG3bNiIjIwkPD8fJ\nyYmJEyeyatWqGmk0Gg3nz58HoKioiMDAwKtT2uvcliXPcWDTt5b9gWG+3N3+GLs//juj3/iVpVuO\nAyoYcHHQ8t8HBtDTR2dJbzsYsFlbAupSmi8BgRBC2Il6WwhycnIICQmx7AcHB7N169YaaebOncst\nt9zCW2+9RWlpKWvXrq01r0WLFrFo0SIAsrOzSUpKanBBS0pKGpW+NSoy+dLtx1msSktHExDDL9t2\n8FzVGzzjOAcM0MtHS+Z5I128tGQWGdm7Zy+BGZ8yL6wnJz360PnEuwRpuuPf2cjZb78mqe942p3d\nx83FaSQl3dXs5b0hL5MSjzAOXeOfe1v4XV8Je7xve7xnsN/7Fq1bswwq/Pjjj5k2bRp/+MMf2Lx5\nM1OmTOHAgQNotTUbIGbMmMGMGTMAGDBgAImJiQ2+RlJSUqPSt06JHNgUwdCfZvHTsYE8x1aWBs9l\n26kujIv1s3QHTB8aQXJ6PrNX7OZvnXvym9NvQsJi6HcvrJxMX4CJy1WW2+bD+MVENGZJ4o3zIahf\nzZX3MjaopXltV+nbUopbWBT+1/jn3jZ+141nj/dtj/cM9nvfonWrt8sgKCiIrKwsy352djZBQTUX\nu3n//feZMGECADfeeCPl5eXk59dcTc9eXbyyoKHzUH41RHOvZi0pHgNZcqoLCybF1hgYmJyeT3yE\nHwsmxbLJ0AvGL4ZPpsDmt0FfDlUXYM9y+Gya+q4xwQCoYOCzaSoIMOjV52fT1HEzfQWUF4G7vHIo\nhBD2oN4Wgri4OFJTU8nIyCAoKIiVK1eyYsWKGmk6d+7Mzz//zLRp0zh8+DDl5eV06GC/fc91rS2Q\nmV/G8Z1reE+3HYB+JRt4od/4GgMALx4YWJnlBMFxUFkCR9dYL7J3JST8ueHBgG2rQFgC3LkQlo4D\nNODsCRM+qplXaXUQ497EgYlCCCGuC/W2EDg4OLBgwQJGjRpFz549mTBhAlFRUTz//PN88803APz7\n3//mvffeIyYmhvvuu4/Fixej0WiueuFbK3MQkJyez43hvoyNCeTF71I4tn01b+jeoNi9CwAm784M\n3v2nGgMNax0YuP0DMOqh+23g7AVaB3BpDzveV0/3DWHbKnDuBKz+s8rTWAXdbr00sCiVSYmEEMKe\nNGgMwZgxYxgzZkyNYy+88IJlu1evXmzatKl5S3adqTGxUO4yloyI4J7F2zEaTVQaTNyoPch03f9Y\nFvQcvzvzN9A54VacQebwhZSkb4PBd9Sab7uz++DQS4AG+k2BzF9Bo4XyczD584Z3G4QlWLse9BWg\nvwAOrurz0Croe18dLQT229IjhBD2RBY3aia2rQKVHfvS5efHiDXsp9Jg4oFOJ/g/pzcpiH6E7aeM\nqhLuOxlMBnoFtGPQ1H/Uma9ncRr4REBADOQdUYMJBz8BmNTT+/jFajBgQ4QlgF/X6mDABSZ/Ch4d\nofNAa+uBWalax0C6DIQQwj5IQNBMzIMAZy3bRfwnVcwon81Cx/kkez3D786+yKbY1xg/fjL/6FcC\nwK7g+0HnBBnrL5tvTtDtkJ8KoUPUGwBhCdC7+hXDvBS1b/tmwMb5l3YjZGywHj+1T3U56JzUdwEx\nUHzq0sCipLrLQAYVCiGEXZCAoBn169weR52G/JJKdmr64OATQmBlBkX+cTy/z5fk9HzCyg5Q4R7I\ntvPtIfgG1QVwGZ7FR8FQoQICM58IVamfOXzpCbZjBUwm6xsEWgf1GTwQvINVS8Nn08C1vQosggbU\nDCxK81SXgpN7M/xkhBBCtHYSEDTBxa8UPr5iN/kllfh7OpHgeAC3s0cACCv4lSUjytmXdQ6ytuIc\nFq8GDoYlQO4+KCus8xrtzh0ANND5RutBByfwjVQVOdRsFQhLgLFvqTcI/hlhHWNg1KtPJ3dw8rSO\nKUADJiOcOVTzwqV54NEB7HhwqBBC2BMJCJrAdtzA/J+O8tPh0zhqNXyQWM5CxzfQYKLEJwqMVfTe\n+DgzffdCcS6EDFQZhA0FTHA8uc5rtDt3AAKiwbVdzS869LC2ENi2ChSkw/d/UgHAhQIY8JC1WyEs\nQb2+6OxRff0EGPGs2s7dUzN/WcdACCHsigQETWA7buCtX1LRauD9aXH0NqXjEDEco9aJ7yLnAhro\nNhqOVK8CGXKD+jy+GbRONfv8zf39AFXleJ0/Al1sugvM/HvC2UyoLLN5g+B+eCcezueARqcGDl78\namJFMTh5WPe9g9WKhiclIBBCCHsmAUET9evcHicHDQYTTBnUhYRuHWDw7yB3D9rIEdw75hYIHwbH\nN6qnfEd36NhbnRwSB5isEw5dPGNgzk50xsqa4wfMOvRQ5+YfVfuhQ1UQoC9XgUDUODAa4J4Pa75B\nYNtCAKpLICAGcvfWzL9EAgIhhLAnEhA0ku24AZPJxEOLt5NXXEnPAE++3Zervju1D4pOQI/bqmcI\njFOTAe35GIL7w4lkdTwsAWLug3PHYc0z1v7+nF2qAj++CRMa6HJjzZYDUC0EYB1HsGsJXCgE367q\nDQJHVzXpUMjAmm8QVJTUbCEAFRCcOazmJwAwGqFMVjoUQgh7IgFBI9mOG3ju6wNsSi/ASafludt7\nsWBSLLNX7CZr82dq8qDuY9TT/s4PVMtAVSl4BtRsBeg3VX1uWWDt7zePCTj8LSUeoXBq/6VrDfiE\ng9ZRVeQZG2D1XwAtPLhGvUFw4EuVrrKk5quJlSVqqmJbgX1V8PDjcyqv8nNqDIKH/6WBiBBCiDZJ\nAoJGMo8beGTpTpZtPYFOC4t/G0d87jLitYdYMCkW1/Q1EDJIjdzP2aWe0E0GlcGR1TVnFiwvUp8h\ng6z9/WEJcNd/4dQ+TBqH2mcj1DmqSYbyUtQ1XLxU14S7n0p3g1pVkorz1nOMRhUQ1NZCYM7zs2mq\njAClBZcGIkIIIdokCQiuQEh7Nyr1Rh7Rfcs/os8SH+lneaqPz/g//EpTVZO+uTINS4B+D6iT4x6y\nVuwZG+CrGdA+TPXrj19s7e939QbAqzjV2nJwMfObBmEJUHLaOmERQPAA9VlRbD1WVao+bccQbJwP\n57LA2RuqylQZvv+j+m7bu1e2mqIQQojrjgQEDWA7buBCpYH7/7uVCr2RCx2iGZ3yV7U4Ued46DoK\nNv5bnXTgS2tlmrEBDnyuVifctcQ6wM/cetBlsBrlHzrU2t+/9xMAsoNur3sRI/+eavzB7mVq4qEe\nt1u/M1f6FSXWY+Zt28mGgvrB57+Fdp1VGVK+V4EBqCBGggEhhLALDVrcyN6Zxw0suC+Wt9elcbyw\nDBdHLbfeMYGcUyF0+WkG+nUaHPSl1gWDbphuDQZsm/zDhlr3zf36Z1JgzzI1R4G5Al73Eri0Jy3y\nYYJDH7m022DjfDUTIcDupRAxEk4fUMHEkCes4wRsWwgqq1sInGzGEJhfWVw+Xr2hcHKXCi7iZsDe\nFdDtFgkKhBDCDkgLQQOYxw08vGSHZRDhB9PiiI/wo3f87Tg7u6pgIHQoOLmplgDzU725FcBcqZor\nYNt1A8x9+OZX/3J2gZsvdIlXrwXWdk5QP9jyf2rbUAkdo2r29zt7qc8aAUH1tvNFYwjCEqDXWLWt\ndYTJX8Lol2t2YQghhGjTJCBooN5B3ugNRgAeSQgnPqJ6FcBt7+JUUaDWAsjcCEOehBHPWCtT8xgC\nWxcvSNSpN6CxBgT9pkLxSfWKYl3nhCXA+I/UtkYHOxfXDDzMAwcrbQICS5fBRQFBxgZI+1md6+gK\nWo3NNRY3fDVFIYQQ1y0JCBpo3v8OUWkwMTEuhOXbTqgxBRkb4MfnwdENuo2CW+bBxtetbwo0tDJ1\ncge/btaA4GT1OUH96z4HICIRvEPUGwxxD9cMPGrtMqgOCGxbCGy7NB741rroke3aCLaBiBBCiDZJ\nxhA0wC8pp/lsRzaxIe145e5oxvbNZ/aK3XzdK4nOJgPEPgDD/qwSB0SrICAswfpfQwTEqBYGgOyd\ngAYC+8GJywQUGRvUAMChf1BdFGFDbVoI3FUeFbW1ENiMIbhcl4aMHRBCCLshLQR1sH2z4KPkTEzA\nXf2CWLg+3TKm4GSpVk3gM+BB64lX+kQdEKO6CUrOQM4O6NBdzS1QF9sn+5HPX9rfr9GoVoL6xhCY\nFz2yJa0CQghhdyQgqIP5zYJfUk7TL2sJk/0z+c/aVG4tWgkZG4jnIINyl6pXBkvzmj6bn+3Awuwd\nakzC5TRksKKzZx2vHV40hkAIIYTdky6DOphbAR76aAd99V142/Qyk0a+SahXBHx8n2oZ0Jer+QfM\nT+pNERCtPg99rdYkCK5n/EBtT/AXd1E4e9acqbBSAgIhhBC1k4DgMmJD2oPJxGZjFD9Hvcr4dTPU\nnP9mjm5qnYLmmM3PxVutT7D/C7Vf34DChri4y6CiRK2poJWGISGEEDVJzWBr4/wa79y/vPowfQ37\nWdB5PZ8fLrMGAz1/A1F3qQF9dU0rfCXX9gpUkxo5uIJ/FGRsIOTEl1eep5OHtVUAqtcxcK87vRBC\nCLslAYEt8yqDGRtYf/QMqVu/5x3nt7h99O0s7LQKE5DT62E4tg7S1tacgKg5rm3u/w/sq5ZI/mwa\nxZ6RV57nJYMKSy6dlEgIIYRAAoKazAPzVtyLx6oHWeD4JidGvA1lhbQ/+SuFITez0ynOJv3Q5pvN\nLywBEp9S2wa9ZVzCufbRV56ns9elXQYyfkAIIUQtJCCwsXB9OsmGnpgMevqX/soh51hKAuLJ/mkB\nAL53vspYv1Nq8p6Jy63v6jfXbH79fwvu/pCzvXm6Ipw9ar5lUFlinbBICCGEsCGDCm1EB3vz9bK3\niTdVYjBpGFK5gdeW/4M4pzTofhucz1EJbV/1M382xziC3D1q1kFzV0TY0KblZ37LwGRS8xJUFINn\nQNPLKYQQos2RFgIb8dpDvOTwHgAfaO/GhIY/mhbjWHEWQofUXDyoudlONGSzFkK7s/uuPE9nT8Bk\nXeVQxhAIIYSogwQEtnJ2Udr9bgDevTCSNZHPo0Gj+t1/fa15Xi+8zLVrm2jIszjtyvO0LHBU3W0g\nYwiEEELUQQICW0OeICX3LOdM7tx+Yx+ezehDTs8HVYXaXK8XXubatU0hnNX5rivP8+IlkGUMgRBC\niDpIQGAjOT0fTd4RsnQhzP1NH5aMKMft8Gdk9ZndfK8XXkuWFQ/Pg9Gg5k2QFgIhhBC1kIDAxpZj\nhYRrToJfd8jYQO9NvyPn5v/jO78Hm+/1wmvJPF6gosQ6jkAmJhJCCFELecvARlf3Cvw056kM62Pp\n0+8dlkBvACKuv2WBLS0ExdZxBDKoUAghRC0kILBx9OAOADqFx0D3Wy5N0FyvF14rtgGBZaVDGUMg\nhBDiUtJlUK28ysD5rIMAaDv2aOHSNBNz5V9ZApXVAwulhUAIIUQt7D4gWLg+neT0fLYcK6CzMRuD\nzpXkfBcWrk9v6aI1ne2gwgpZ+lgIIUTd7D4giA72ZvaK3SzbcpzuuhzKvMKZ/fFeooO9W7poTefg\nDFpHGUMghBCiXnYfEMRH+LHgvlh+STlDV+1Jfj3nw4JJscRH+LV00ZpOo6mevrhExhAIIYS4LLsP\nCAD8vVxwNV2goykfr5DebSMYMHP2qG4hkDEEQggh6taggGDNmjV0796dyMhIXnnllVrTfPrpp/Tq\n1YuoqCgmTZrUrIW82pZvOU6E5iQAX2V7kJye38IlakbmJZBlDIEQQojLqDcgMBgMPPbYY6xevZpD\nhw7x8ccfc+jQoRppUlNTefnll9m0aRMHDx5k/vz5V63AzS05PZ9lW48T63IagPtvv5nZK3a3naDA\n2VO1DlSWAhpwdGvpEgkhhGiF6g0Itm3bRmRkJOHh4Tg5OTFx4kRWrVpVI817773HY489Rvv27QHw\n9/e/OqW9Gja9wRDdIYb5ngWtI7Ex/VgyohztpjdaumTNw8nDOqjQyR200kskhBDiUvVOTJSTk0NI\nSIhlPzg4mK1bt9ZIc/ToUQAGDx6MwWBg7ty53HrrrZfktWjRIhYtWgRAdnY2SUlJDS5oSUlJo9I3\nVLnWl9c0r1FWEkipSydSv3mHXof+xaFef7oq12uspt53r6ILeJScpsh4FB8c2dwK7qk+V+t33drZ\n433b4z2D/d63aN2aZaZCvV5PamoqSUlJZGdnk5CQwP79+2nXrl2NdDNmzGDGjBkADBgwgMTExAZf\nIykpqVHpG2rh+hA+OlTJCu3LaHwj6Zs6HyYtp28rmZGwyfd9/ks4moqbrydU+V6Vn2Fzu1q/69bO\nHu/bHu8Z7Pe+RetWb/txUFAQWVlZlv3s7GyCgoJqpAkODmbs2LE4OjoSFhZGt27dSE1Nbf7SXgWb\n0vJx8glBYzJC/tGrv8zxtWb72qEMKBRCCFGHegOCuLg4UlNTycjIoLKykpUrVzJ27Ngaae68805L\n81d+fj5Hjx4lPDz8qhS4OVXqjWzPLORJx6/VgYGzrs9lji/H2ROqSqG8yDpzoRBCCHGRegMCBwcH\nFixYwKhRo+jZsycTJkwgKiqK559/nm+++QaAUaNG4evrS69evRg+fDj/+te/8PX1veqFb6rdJ84S\na9hH9NkfITAWRr9yfS5zfDnmIKDklLQQCCGEqFODxhCMGTOGMWPG1Dj2wgsvWLY1Gg2vv/46r7/+\nevOW7ipZuD6d6GBvthwr5A7tFjQYORo+lV/WpzNzWML1t8zx5ZiDgOJTEDKwZcsihBCi1bKfd9A2\nzrc89ZvXL8jd8wNxzifQO3owLdnfun5BWAIMeaIFC9uMzC0EhkppIRBCCFGnZnnL4LoQ1E91Bdzx\nFvH5R/k0ugKfXW/hrqngG2MCi24y0Tt3GUS0kUDAzNnLZlsCAiGEELWzn4AgLAF+8zZ8PBFc2hFR\nXsQqwyDudNhMuy4x9N70O9VV0NbYBgGysJEQQog62E+XAUD7UPVZfg4NJsbqNlOm9SQ28z0ODH6j\nbYwZuJjtmwVO7i1XDiGEEK2afQUEaT8DkNfldi6YnDChwc1YTEmfB5j6i0vbWb/Alm1AIF0GQggh\n6mA/AUHGBkh6GYBf/Key1HUKGg0QfS8h6R+zZEQ5+7KLWraMV0ONFgIJCIQQQtTOfgKCnF3QdzIA\nE8IquKf8U74PeAz8e8H4xfTe9Dtmds5p4UJeBbbjBmRiIiGEEHWwn4BgyBPg2g7QUJKTwmOVcyjo\nM10dD7OZe6Ct0TmAg6valhYCIYQQdbCfgACgNA/cfNjReRqbjVH0DLB5Ja8tzT1wMXPLgIwhEEII\nUQc7Cwjywc2Pw7nnAejeyU6a0M2BgLQQCCGEqIP9BQTuHUjJLSaonSvero4tXaJrw9JCYCcBkBBC\niEazr4CgLB/cfTmce56eAXZQOZqnazbPVujkofY3zm/ZcgkhhGh17CsgKM1D7+rHsfxSenTyqj/9\n9c48XbO+AjRayN6u9oP6tXTJhBBCtDL2ExAY9HDhLIUmTwxGU80BhW2V+e2J3L2gdYDPf6v22+KM\njEIIIZrEfgKCsgIAsivVwLoe9tBlAKryD0tQqx0OeEiCASGEELWym4Dg0w27AUgvc8HFUUuorzvJ\n6fksXJ/ewiW7yjI2wMldkPBn2PG+ZQloIYQQwpbdBARR3hUA7MjT0b2jJ1szCpi9YjfRwd4tXLKr\nKGODGjMwfjGMeEZ9fjZNggIhhBCXsKOAoAqAXfk6qgwmZq/YzYJJscRH+LVwya6inF01xwy05RkZ\nhRBCNIlDSxfgmqkeQ5Bv8uJs7nnmjIhs28EA1D7zonlMgRBCCGHDbloIKM3DiJZzeHBn3yCWbT3R\nNpc7FkIIIa6A3QQEp3KzKTR5YkLLU6N7sGBSLLNX7JagQAghhMCOAoKys6eocGqPh7MDHb2ciY/w\nY8GkWPZlF7V00YQQQogWZzdjCMLdyjl43psIfw80Gg0A8RF+bX8cgRBCCNEAdtNCQGkeJ6vciewg\nK/4JIYQQF7ObgMBUmk9OlQcR/u4tXRQhhBCi1bGPgMBQhab8HIUmL2khEEIIIWphHwFB9RwEhXgS\n6S8BgRBCCHEx+wgISvMAOKdpR2cftxYujBBCCNH62ElAoOYacPbugIPOPm5ZCCGEaAz7qB2rAwIv\nv8AWLogQQgjROtlFQKAvOQNAB38JCIQQQoja2EVAUJSXi96kJShQAgIhhBCiNnYxU2Hp2VMY8STC\n36uliyKEEEK0SnYROW3OXwAAE1VJREFUEFSdP0OZyYsImYNACCGEqJVddBloygoocWiHq5OupYsi\nhBBCtEptOiBYuD6d5PR8nCsL0Lv4ApCcns/C9ektXDIhhBCidWnTAcGtRStZvGwpnoYitB4dSE7P\nZ/HypdxatLKliyaEEEK0Kg0KCNasWUP37t2JjIzklVdeqTPdF198gUajYceOHc1WwKYI7TOUtxzf\nwEtTRnalO4uXL+VtxzcJ7TO0pYsmhBBCtCr1BgQGg4HHHnuM1atXc+jQIT7++GMOHTp0Sbri4mLe\neOMNBg4ceFUKekXCEjgU+zcA2hXsYb52Po4TP4KwhBYumBBCCNG61BsQbNu2jcjISMLDw3FycmLi\nxImsWrXqknTPPfccf/nLX3BxcbkqBb1S205WADBCt4dlhptINvZq4RIJIYQQrU+9rx3m5OQQEhJi\n2Q8ODmbr1q010uzatYusrCxuu+02/vWvf9WZ16JFi1i0aBEA2dnZJCUlNbigJSUljUoPcLjAQETm\np5h0cCLkbqac/JHHFndnb9/+9PS9Pt44uJL7vt7Z4z2Dfd63Pd4z2O99i9atyfMQGI1GnnzySRYv\nXlxv2hkzZjBjxgwABgwYQGJiYoOvk5SU1Kj0AOe/+piRul1kuPQm/KEPIGMD7658gNW6l0lMnNio\nvFrKldz39c4e7xns877t8Z7Bfu9btG71dhkEBQWRlZVl2c/OziYoKMiyX1xczIEDB0hMTCQ0NJQt\nW7YwduzYVjGw8CaH3egwkRM6Th0IS8Bx4keM9TvVsgUTQgghWpl6A4K4uDhSU1PJyMigsrKSlStX\nMnbsWMv33t7e5Ofnk5mZSWZmJoMGDeKbb75hwIABV7XgDZGr9wTALWq09WBYAgx5ooVKJIQQQrRO\n9QYEDg4OLFiwgFGjRtGzZ08mTJhAVFQUzz//PN988821KOMVc81YywFjKJGR3Vq6KEIIIUSr1qAx\nBGPGjGHMmDE1jr3wwgu1pm01A2XKCul0fh8/Ot1Db1fHli6NEEII0aq13ZkK035Gi5HTnYa1dEmE\nEEKIVq/tBQQb50PGBqpSviff5IV7WBxkbFDHhRBCCFGrthcQBPWDz6ahPfoDSca+DHY8Ap9NU8eF\nEEIIUau2FxCEJcDQP6DTl+JGOTGbn4Dxi2W6YiGEEOIy2l5AAJCfih4dY3Tb0MY9JMGAEEIIUY82\nFxAsWpeCfu+nGNGyynsy7HifA5u+ZeH69JYumhBCCNFqtbmAYNS5T3DQlzJffxepvX7HgcFvEPTT\nowxxuHSFRiGEEEIobS4g6HLqRyp17izS38axvBKm/uJCzs3/R2+TtBAIIYQQdWny4katSkUxFKRz\ntOPt6I858P2BU8wZEUnvwd1bumRCCCFEq3b9txBUzzsAQMr3oL/ApnPtmeXwLXNGRLJs6wmS0/Nb\ntoxCCCFEK3f9BwTV8w6QsQH2f0alix/3lH6MQ+f+PHlLdxZMimX2it0SFAghhBCXcf0HBGEJap6B\nTx+AtLVQUczsqjlED1ErMsZH+LFgUiz7sotatpxCCCFEK3b9BwSggoKQgYCJFP/RbDVFcUOYj+Xr\n+Ag/Zg6LaLnyCSGEEK1c2wgIMjb8f3v3HltVuadx/NsbIBcLQ7uB012EdkNpC6UFCgwhIq2gUlMC\nFEFgxFtAxHAxXpJJDvGCgOeMCg7MeBiJolxKJBPgyNB4QEFOK2JtgZGiKWUXulvkUmgPbYFe9jt/\nNG5lkIDQurr2fj5/da290v375e3lybvevV4o+RxCO3DP2c+Z4ThJuHY4FBERuWX2DwTuL5vXEHTo\nSmNMOvPrF/CvtW/+vNBQREREbsr+gaC8ACb8GWrP4O6UzN+bEigZs7r5vIiIiNwS+z+HYPQiOLwF\ngL1X+9MuNJh+Ix+EsBCLCxMREbEP288QvLevhDP/uxs6hLOtoitDe3ej4NRF7V0gIiLyG9g+ECQ5\nw7lyfD9nuw3h6I+1RP/TXTy3qZAkZ7jVpYmIiNiG7QPBKEcj93Ca9RVOAHK++5HVM1IYFRthcWUi\nIiL2YftAwMlcAC5EpAIwc0RvhQEREZHfyP6BoDSXxrDObPuxO3d3CGVLvkePKRYREfmN7BkIfrGh\nUV3xlxxo6Mf9nY7zx25/094FIiIit8GegeCnDY2O/ZWO1cXExvbn1av/RmPPZO1dICIichvs+RyC\nnzY0yp4BgKNsF7MaFvBI//uA5r0LtI5ARETk1tlzhgCaQ0GvZADcfR7hK28i/RxdLC5KRETEnuwb\nCNxfgucghHbgDye2Mir4KC5HZ6urEhERsSV7BoKfNjRyJEJkHH9x/JH/aPfvdPDkWl2ZiIiILdkz\nEJQXNK8hqK+F8Gj+esnFul5LtKGRiIjIbbLnosLRi8AYqC6jMWYsJ4/UwaB7YXSc1ZWJiIjYkj1n\nCADqLkBDHedDetDkNfTroQWFIiIit8u+gaD6FACnmroD0L+HFhSKiIjcLvsGgqoyAI5dDic0OIiY\nCAUCERGR22XPNQQA1c2BoPAfXegTEUq7UPtmGxEREavZ979otQfCOlJ4Lki3C0RERO6QLQPBe/tK\nqCw/jvduJ6cuXqafowt5Jed5b1+J1aWJiIjYki0DQZIznLNlx/kxKBJjms89t6mQJGe4tYWJiIjY\n1C0FgpycHOLi4nC5XKxYseK6199++20SEhJISkoiPT2dkydPtnihvzQqNgJX+4vsP3cXAB/mlbJ6\nRoo2NBIREblNNw0ETU1NzJ8/n127dlFUVMTmzZspKiq65pqUlBTy8/M5cuQIWVlZvPTSS61WMAD1\ntYRdvcjVTlEA/MvIexQGRERE7sBNA8HBgwdxuVzExMTQrl07pk+fzvbt26+5ZuzYsXTs2BGAkSNH\n4vF4Wqfan1T9/AmDXuEd2HTwFHkl51v3PUVERPzYTT92WF5eTnR0tO/Y6XTy9ddf3/D6devW8dBD\nD/3qa2vXrmXt2rUAeDwe9u7de8uF1tTU+K6vLf2GDKDcdGdg10aGOEKZ++HXPJvcgfjuIbf8Pe3g\nl30HikDsGQKz70DsGQK3b2nbWvQ5BBs2bCA/P599+/b96utz5sxhzpw5AAwbNoz77rvvlr/33r17\nfdd/uak5kJxqiuClEYlMHuJkcPJ5jniquW9M7B310Nb8su9AEYg9Q2D2HYg9Q+D2LW3bTQNBVFQU\nZWVlvmOPx0NUVNR11+3evZs33niDffv20b59+5at8v+513EZb3EoZ+nm+2TBqNgIrSMQERG5TTdd\nQ5CamkpxcTFut5v6+nqys7PJzMy85prCwkLmzp3Ljh07cDgcrVasT1UZ1WGR3NUujL56ZLGIiMgd\nu2kgCA0NZfXq1TzwwAPEx8fzyCOPkJiYyJIlS9ixYwcAL774IjU1NUydOpXk5OTrAkOLqy6j3ESQ\n+IdwQoKDWve9REREAsAtrSGYMGECEyZMuObca6+95vt69+7dLVvVTZjqMoqvuhikBxGJiIi0CPs9\nqbCpAS79yClvdz2ZUEREpIXYJhBEn/pvcH8J/ygnyHgpNxGkmu/g7yutLk1ERMT2bBMILnVxwSeP\nw7GdAESGXqbX3+ZB1BBrCxMREfEDLfocgtZU1S0Jpn4Imx8FYF7wNoKmboa+91pbmIiIiB+wzQzB\n/5yoJ8+bgLdXMgCHe04mz5ugLY9FRERagG0CQd/wED7c+DH1FUf5S2MGKed28OHGj7WwUEREpAXY\n5pbBPwcf5emwd5lz+Tm+aIznm8Zh/Gf7dwkLHgrotoGIiMidsM0MQZdLxwmbvp6OcWkAxI/KIGz6\neigvsLgyERER+7NNICjr3bxm4KsTlSxIc7Hx61PkeRNg9CKrSxMREbE929wyOFbZxH/tL2T1jBRG\nxUYwMrY7z236+VhERERun21mCNzVTdf88x8VG8HqGSkc8VRbXJmIiIj92WaGYEJMu+tmArTlsYiI\nSMuwzQyBiIiItB4FAhEREVEgEBEREQUCERERQYFAREREgCBjjLHijSMiIujTp88tX3/u3DkiIyNb\nr6A2KhD7DsSeITD7DsSe4c76Li0t5fz58y1ckYiFgeC3GjZsGPn5+VaX8bsLxL4DsWcIzL4DsWcI\n3L6lbdMtAxEREVEgEBEREQh55ZVXXrG6iFs1dOhQq0uwRCD2HYg9Q2D2HYg9Q+D2LW2XbdYQiIiI\nSOvRLQMRERFRIBARERGbBIKcnBzi4uJwuVysWLHC6nJaRVlZGWPHjiUhIYHExERWrVoFwIULFxg3\nbhz9+vVj3LhxXLx40eJKW15TUxMpKSk8/PDDALjdbkaMGIHL5WLatGnU19dbXGHLq6qqIisriwED\nBhAfH89XX30VEGP9zjvvkJiYyMCBA3n00Ue5cuWK3433k08+icPhYODAgb5zNxpbYwwLFizA5XKR\nlJREQUGBVWWLtP1A0NTUxPz589m1axdFRUVs3ryZoqIiq8tqcaGhobz11lsUFRVx4MAB1qxZQ1FR\nEStWrCA9PZ3i4mLS09P9MhCtWrWK+Ph43/HLL7/M4sWLOX78ON26dWPdunUWVtc6Fi5cyIMPPsj3\n33/P4cOHiY+P9/uxLi8v59133yU/P5/vvvuOpqYmsrOz/W68H3/8cXJycq45d6Ox3bVrF8XFxRQX\nF7N27VrmzZtnRckizUwbl5eXZ8aPH+87XrZsmVm2bJmFFf0+MjMzzWeffWb69+9vKioqjDHGVFRU\nmP79+1tcWcsqKyszaWlpZs+ePSYjI8N4vV7TvXt309DQYIy5fvz9QVVVlenTp4/xer3XnPf3sfZ4\nPMbpdJrKykrT0NBgMjIyTE5Ojl+Ot9vtNomJib7jG43tnDlzzKZNm371OpHfW5ufISgvLyc6Otp3\n7HQ6KS8vt7Ci1ldaWkphYSEjRozgzJkz9OrVC4CePXty5swZi6trWYsWLeJPf/oTwcHNP4qVlZV0\n7dqV0NBQwD/H2+12ExkZyRNPPEFKSgpPP/00tbW1fj/WUVFRvPDCC/Tu3ZtevXoRHh7O0KFD/X68\ngRuObSD+fZO2q80HgkBTU1PDlClTWLlyJXffffc1rwUFBREUFGRRZS3v008/xeFwBNznsRsbGyko\nKGDevHkUFhbSqVOn624P+NtYA1y8eJHt27fjdrupqKigtrb2uqn1QOCPYyv+oc0HgqioKMrKynzH\nHo+HqKgoCytqPQ0NDUyZMoWZM2cyefJkAHr06MHp06cBOH36NA6Hw8oSW1Rubi47duygT58+TJ8+\nnc8//5yFCxdSVVVFY2Mj4J/j7XQ6cTqdjBgxAoCsrCwKCgr8eqwBdu/eTd++fYmMjCQsLIzJkyeT\nm5vr9+MNN/49DqS/b9L2tflAkJqaSnFxMW63m/r6erKzs8nMzLS6rBZnjOGpp54iPj6e559/3nc+\nMzOT9evXA7B+/XomTpxoVYktbvny5Xg8HkpLS8nOziYtLY2NGzcyduxYtm7dCvhfz9A8ZRwdHc0P\nP/wAwJ49e0hISPDrsQbo3bs3Bw4coK6uDmOMr29/H2+48e9xZmYmH330EcYYDhw4QHh4uO/Wgsjv\nzuI1DLdk586dpl+/fiYmJsYsXbrU6nJaxf79+w1gBg0aZAYPHmwGDx5sdu7cac6fP2/S0tKMy+Uy\n6enpprKy0upSW8UXX3xhMjIyjDHGlJSUmNTUVBMbG2uysrLMlStXLK6u5RUWFpqhQ4eaQYMGmYkT\nJ5oLFy4ExFgvWbLExMXFmcTERDNr1ixz5coVvxvv6dOnm549e5rQ0FATFRVl3n///RuOrdfrNc8+\n+6yJiYkxAwcONN98843F1Usg06OLRUREpO3fMhAREZHWp0AgIiIiCgQiIiKiQCAiIiIoEIiIiAgK\nBCK3Ze/evb7dGUVE/IECgYiIiCgQiH/bsGEDw4cPJzk5mblz59LU1ETnzp1ZvHgxiYmJpKenc+7c\nOQAOHTrEyJEjSUpKYtKkSb49648fP87999/P4MGDGTJkCCUlJUDzvhNZWVkMGDCAmTNnokd6iIid\nKRCI3zp27BhbtmwhNzeXQ4cOERISwsaNG6mtrWXYsGEcPXqUMWPG8OqrrwLw2GOP8eabb3LkyBEG\nDRrkOz9z5kzmz5/P4cOHycvL8z1atrCwkJUrV1JUVMSJEyfIzc21rFcRkTsVanUBIq1lz549fPvt\nt6SmpgJw+fJlHA4HwcHBTJs2DYBZs2YxefJkqqurqaqqYsyYMQDMnj2bqVOncunSJcrLy5k0aRIA\nHTp08H3/4cOH43Q6AUhOTqa0tJTRo0f/ni2KiLQYBQLxW8YYZs+ezfLly685//rrr19zfLtb0bZv\n3973dUhIiG/HPhERO9ItA/Fb6enpbN26lbNnzwJw4cIFTp48idfr9e2ut2nTJkaPHk14eDjdunVj\n//79AHz88ceMGTOGLl264HQ62bZtGwBXr16lrq7OmoZERFqRZgjEbyUkJLB06VLGjx+P1+slLCyM\nNWvW0KlTJw4ePMjSpUtxOBxs2bIFaN6W9plnnqGuro6YmBg++OADoDkczJ07lyVLlhAWFsYnn3xi\nZVsiIq1Cux1KwOncuTM1NTVWlyEi0qboloGIiIhohkBEREQ0QyAiIiIoEIiIiAgKBCIiIoICgYiI\niKBAICIiIsD/AZR2vigJdi0EAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": { "tags": [] }, "execution_count": 41 } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "FJ9K1MtIMq5-" }, "source": [ "先程の浅い(層数の少ない)CNNを用いた際には60%前後だったValidationデータでの精度が,90%程度まで上がりました.また,テストデータを用いた精度も,およそ90%程度となっています.しかし最新の研究成果では97%以上まで達成されています.さらに精度を上げるには,今回行ったようなネットワークの構造自体の改良ももちろんのこと,学習データを擬似的に増やす操作(Data augmentation)や,複数のモデルの出力を一つの出力に統合する操作(Ensemble)などなど,いろいろな工夫が考えられます." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "IyOFHCvrMq5_" }, "source": [ "## データセットクラスの使用方法\n", "\n", "ここでは,Chainerにすでに用意されているCIFAR10のデータを取得する機能を使って,データセットクラスを自分で書いてみます.Chainerでは,データセットを表すクラスは以下の機能を持っている必要があります.\n", "\n", "- データセット内のデータ数を返す`__len__`メソッド\n", "- 引数として渡される`i`に対応したデータもしくはデータとラベルの組を返す`get_example`メソッド\n", "\n", "その他のデータセットに必要な機能は,`chainer.dataset.DatasetMixin`クラスを継承することで用意できます.ここでは,`DatasetMixin`クラスを継承し,学習時に学習データに変換を施してモデルが受け取るデータのバリエーションを増やすData augmentation機能のついたデータセットクラスを作成してみましょう." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "b-11jjDiMq6B" }, "source": [ "### CIFAR10データセットクラス" ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "csErjCCTMq6C", "colab": {} }, "source": [ "class CIFAR10Augmented(chainer.dataset.DatasetMixin):\n", "\n", " def __init__(self, split='train', train_ratio=0.9):\n", " train_val, test_data = cifar.get_cifar10()\n", " train_size = int(len(train_val) * train_ratio)\n", " train_data, valid_data = split_dataset_random(train_val, train_size, seed=0)\n", " if split == 'train':\n", " self.data = train_data\n", " elif split == 'valid':\n", " self.data = valid_data\n", " elif split == 'test':\n", " self.data = test_data\n", " else:\n", " raise ValueError(\"'split' argument should be either 'train', 'valid', or 'test'. But {} was given.\".format(split))\n", "\n", " self.split = split\n", " self.random_crop = 4\n", "\n", " def __len__(self):\n", " return len(self.data)\n", "\n", " def get_example(self, i):\n", " x, t = self.data[i]\n", " if self.split == 'train':\n", " x = x.transpose(1, 2, 0)\n", " h, w, _ = x.shape\n", " x_offset = np.random.randint(self.random_crop)\n", " y_offset = np.random.randint(self.random_crop)\n", " x = x[y_offset:y_offset + h - self.random_crop,\n", " x_offset:x_offset + w - self.random_crop]\n", " if np.random.rand() > 0.5:\n", " x = np.fliplr(x)\n", " x = x.transpose(2, 0, 1)\n", "\n", " return x, t" ], "execution_count": 42, "outputs": [] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "x3UPCe0RMq6F" }, "source": [ "このクラスは,CIFAR10のデータのそれぞれに対し,\n", "\n", "- 32x32の大きさの中からランダムに28x28の領域をクロップ\n", "- 1/2の確率で左右を反転させる\n", "\n", "という加工を行っています.このような操作を加えて擬似的に学習データのバリエーションを増やすことで,オーバーフィッティングの抑制などに寄与することが知られています.これらの操作以外にも,画像の色味を変化させるような変換やランダムな回転,アフィン変換など,さまざまな加工によって学習データ数を擬似的に増やす方法が提案されています.\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "vmvsVsTMMq6G" }, "source": [ "### 作成したデータセットクラスを用いた学習\n", "\n", "それではさっそくこの`CIFAR10`クラスを使って学習を行ってみましょう.先程と同じネットワークを用い,Data augmentationの効果がどの程度あるのかを調べてみましょう.`train`関数も含め,データセットクラス以外は先程とすべて同様です.\n", "\n", "ここでも,40分ほどの時間がかかりますので,上と同様に90エポックまで学習したあとのsnapshotをダウンロードして読み込ませ,最後の10エポックだけ実際に学習させてみましょう." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "upvteI1eMq6G", "outputId": "c0442f4a-4d60-42ad-e57b-37e1bee6af27", "colab": { "base_uri": "https://localhost:8080/", "height": 1000 } }, "source": [ "!wget https://github.com/japan-medical-ai/medical-ai-course-materials/releases/download/v0.1/DeepCNN_cifar10_augmented_snapshot_epoch_90.npz\n", "\n", "reset_seed(0)\n", "\n", "model = train(DeepCNN(10), max_epoch=100, train_dataset=CIFAR10Augmented(), valid_dataset=CIFAR10Augmented('valid'), test_dataset=CIFAR10Augmented('test'), postfix='augmented_', base_lr=0.1, lr_decay=(30, 'epoch'), snapshot='DeepCNN_cifar10_augmented_snapshot_epoch_90.npz')" ], "execution_count": 43, "outputs": [ { "output_type": "stream", "text": [ "--2019-12-09 11:18:31-- https://github.com/japan-medical-ai/medical-ai-course-materials/releases/download/v0.1/DeepCNN_cifar10_augmented_snapshot_epoch_90.npz\n", "Resolving github.com (github.com)... 52.74.223.119\n", "Connecting to github.com (github.com)|52.74.223.119|:443... connected.\n", "HTTP request sent, awaiting response... 302 Found\n", "Location: https://github-production-release-asset-2e65be.s3.amazonaws.com/153412006/5064a880-eeb7-11e8-95bf-80b5d9533256?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20191209%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20191209T111832Z&X-Amz-Expires=300&X-Amz-Signature=1dc193a84a383234eb92fd9c7cb0db88c9ad7dad53e4e9a32d06f33a3825b832&X-Amz-SignedHeaders=host&actor_id=0&response-content-disposition=attachment%3B%20filename%3DDeepCNN_cifar10_augmented_snapshot_epoch_90.npz&response-content-type=application%2Foctet-stream [following]\n", "--2019-12-09 11:18:32-- https://github-production-release-asset-2e65be.s3.amazonaws.com/153412006/5064a880-eeb7-11e8-95bf-80b5d9533256?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20191209%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20191209T111832Z&X-Amz-Expires=300&X-Amz-Signature=1dc193a84a383234eb92fd9c7cb0db88c9ad7dad53e4e9a32d06f33a3825b832&X-Amz-SignedHeaders=host&actor_id=0&response-content-disposition=attachment%3B%20filename%3DDeepCNN_cifar10_augmented_snapshot_epoch_90.npz&response-content-type=application%2Foctet-stream\n", "Resolving github-production-release-asset-2e65be.s3.amazonaws.com (github-production-release-asset-2e65be.s3.amazonaws.com)... 52.216.241.116\n", "Connecting to github-production-release-asset-2e65be.s3.amazonaws.com (github-production-release-asset-2e65be.s3.amazonaws.com)|52.216.241.116|:443... connected.\n", "HTTP request sent, awaiting response... 200 OK\n", "Length: 56730280 (54M) [application/octet-stream]\n", "Saving to: ‘DeepCNN_cifar10_augmented_snapshot_epoch_90.npz’\n", "\n", "DeepCNN_cifar10_aug 100%[===================>] 54.10M 12.6MB/s in 5.1s \n", "\n", "2019-12-09 11:18:38 (10.5 MB/s) - ‘DeepCNN_cifar10_augmented_snapshot_epoch_90.npz’ saved [56730280/56730280]\n", "\n" ], "name": "stdout" }, { "output_type": "stream", "text": [ "/usr/local/lib/python3.6/dist-packages/chainer/training/triggers/interval_trigger.py:92: UserWarning: The previous value of iteration is not saved. IntervalTrigger guesses it using current iteration. If this trigger is not called at every iteration, it may not work correctly.\n", " 'The previous value of iteration is not saved. '\n", "/usr/local/lib/python3.6/dist-packages/chainer/training/triggers/interval_trigger.py:104: UserWarning: The previous value of epoch_detail is not saved. IntervalTrigger uses the value of trainer.updater.previous_epoch_detail. If this trigger is not called at every iteration, it may not work correctly.\n", " 'The previous value of epoch_detail is not saved. '\n" ], "name": "stderr" }, { "output_type": "stream", "text": [ "epoch main/loss main/accuracy val/main/loss val/main/accuracy elapsed_time lr \n", "\u001b[J1 2.5875 0.156405 2.11656 0.203125 24.1767 0.1 \n", "\u001b[J2 1.99359 0.233842 1.84577 0.304492 47.9466 0.1 \n", "\u001b[J3 1.76968 0.325365 1.98983 0.26543 71.6864 0.1 \n", "\u001b[J4 1.61662 0.389537 2.07369 0.26875 95.5072 0.1 \n", "\u001b[J5 1.41259 0.478989 1.52089 0.446484 119.236 0.1 \n", "\u001b[J6 1.23382 0.555487 1.48775 0.480664 143.06 0.1 \n", "\u001b[J7 1.09323 0.613404 1.11949 0.590234 166.813 0.1 \n", "\u001b[J8 0.99303 0.650857 1.33017 0.566992 190.624 0.1 \n", "\u001b[J9 0.926848 0.678755 1.0075 0.665234 214.446 0.1 \n", "\u001b[J10 0.863165 0.702769 0.858035 0.717383 238.218 0.1 \n", "\u001b[J11 0.807948 0.727162 0.9556 0.679297 265.757 0.1 \n", "\u001b[J12 0.769224 0.739116 0.857765 0.711328 289.507 0.1 \n", "\u001b[J13 0.739977 0.752952 0.91583 0.711133 313.339 0.1 \n", "\u001b[J14 0.72064 0.759393 1.20587 0.61875 337.097 0.1 \n", "\u001b[J15 0.690136 0.77093 0.837919 0.726562 360.905 0.1 \n", "\u001b[J16 0.673935 0.774706 1.03539 0.678711 384.67 0.1 \n", "\u001b[J17 0.662879 0.778742 0.730712 0.758789 408.47 0.1 \n", "\u001b[J18 0.639202 0.78742 0.758566 0.765625 432.298 0.1 \n", "\u001b[J19 0.625988 0.792713 1.24791 0.664062 456.061 0.1 \n", "\u001b[J20 0.616269 0.795277 0.963706 0.70625 479.882 0.1 \n", "\u001b[J21 0.611734 0.795962 0.887129 0.723437 507.312 0.1 \n", "\u001b[J22 0.600444 0.800582 0.889526 0.710352 531.173 0.1 \n", "\u001b[J23 0.605317 0.800414 0.715702 0.756445 554.926 0.1 \n", "\u001b[J24 0.584194 0.805731 0.984225 0.694336 578.687 0.1 \n", "\u001b[J25 0.584041 0.805464 0.956576 0.685156 602.49 0.1 \n", "\u001b[J26 0.57384 0.80954 0.977559 0.712695 627.031 0.1 \n", "\u001b[J27 0.560405 0.814298 0.894127 0.718945 650.845 0.1 \n", "\u001b[J28 0.559933 0.816195 0.729981 0.752734 674.584 0.1 \n", "\u001b[J29 0.555933 0.814387 0.841304 0.727344 698.4 0.1 \n", "\u001b[J30 0.558057 0.814971 0.753542 0.757227 722.119 0.1 \n", "\u001b[J31 0.397613 0.866455 0.337977 0.888867 749.619 0.01 \n", "\u001b[J32 0.320024 0.890202 0.322082 0.894336 773.368 0.01 \n", "\u001b[J33 0.293655 0.900479 0.323365 0.888867 797.169 0.01 \n", "\u001b[J34 0.279553 0.904874 0.308263 0.897656 820.951 0.01 \n", "\u001b[J35 0.26519 0.909945 0.301763 0.897852 844.682 0.01 \n", "\u001b[J36 0.259166 0.909846 0.286909 0.904688 868.482 0.01 \n", "\u001b[J37 0.246168 0.915064 0.289997 0.904688 892.324 0.01 \n", "\u001b[J38 0.24097 0.91697 0.280986 0.903906 916.139 0.01 \n", "\u001b[J39 0.233951 0.918892 0.291962 0.904102 939.884 0.01 \n", "\u001b[J40 0.220939 0.923628 0.299502 0.902539 963.666 0.01 \n", "\u001b[J41 0.216055 0.924272 0.2946 0.905664 991.125 0.01 \n", "\u001b[J42 0.215143 0.926972 0.308637 0.897266 1014.88 0.01 \n", "\u001b[J43 0.213903 0.926625 0.291742 0.907812 1038.64 0.01 \n", "\u001b[J44 0.203283 0.929198 0.296043 0.905469 1062.33 0.01 \n", "\u001b[J45 0.19772 0.931041 0.327708 0.89375 1086.11 0.01 \n", "\u001b[J46 0.194907 0.932893 0.312555 0.901563 1109.82 0.01 \n", "\u001b[J47 0.190354 0.934326 0.336271 0.895703 1133.58 0.01 \n", "\u001b[J48 0.190431 0.932915 0.326305 0.902539 1157.3 0.01 \n", "\u001b[J49 0.18926 0.934326 0.312767 0.901172 1181.05 0.01 \n", "\u001b[J50 0.184469 0.936035 0.296937 0.907812 1204.93 0.01 \n", "\u001b[J51 0.181691 0.936521 0.324149 0.901172 1232.22 0.01 \n", "\u001b[J52 0.17546 0.939675 0.347524 0.893945 1256 0.01 \n", "\u001b[J53 0.175786 0.937723 0.335627 0.893164 1279.74 0.01 \n", "\u001b[J54 0.173612 0.940274 0.317897 0.902344 1303.52 0.01 \n", "\u001b[J55 0.171849 0.939548 0.306998 0.90625 1327.23 0.01 \n", "\u001b[J56 0.168304 0.94165 0.31145 0.902148 1351.04 0.01 \n", "\u001b[J57 0.170139 0.941495 0.301311 0.910156 1374.82 0.01 \n", "\u001b[J58 0.165011 0.942708 0.359516 0.892773 1398.52 0.01 \n", "\u001b[J59 0.163968 0.94256 0.365818 0.886133 1422.3 0.01 \n", "\u001b[J60 0.16541 0.942575 0.357 0.890234 1446.01 0.01 \n", "\u001b[J61 0.129435 0.955988 0.277052 0.915234 1473.42 0.001 \n", "\u001b[J62 0.101981 0.965434 0.284798 0.916406 1497.13 0.001 \n", "\u001b[J63 0.0953637 0.967285 0.279956 0.919727 1520.93 0.001 \n", "\u001b[J64 0.0911066 0.968171 0.28204 0.918359 1544.63 0.001 \n", "\u001b[J65 0.0853851 0.97037 0.28504 0.918945 1568.41 0.001 \n", "\u001b[J66 0.0800331 0.972101 0.287688 0.917969 1592.21 0.001 \n", "\u001b[J67 0.0761374 0.973202 0.29148 0.920117 1616.19 0.001 \n", "\u001b[J68 0.0756613 0.973699 0.299635 0.918945 1639.98 0.001 \n", "\u001b[J69 0.075577 0.97407 0.293845 0.918359 1663.68 0.001 \n", "\u001b[J70 0.0730666 0.974676 0.29563 0.920508 1687.47 0.001 \n", "\u001b[J71 0.070825 0.975516 0.295581 0.920313 1714.73 0.001 \n", "\u001b[J72 0.0710753 0.975697 0.29838 0.919336 1738.52 0.001 \n", "\u001b[J73 0.0705982 0.975142 0.298369 0.920508 1762.3 0.001 \n", "\u001b[J74 0.0667571 0.976562 0.299809 0.920508 1786.01 0.001 \n", "\u001b[J75 0.0642319 0.978427 0.300881 0.920898 1809.77 0.001 \n", "\u001b[J76 0.0640179 0.977742 0.304647 0.918359 1833.51 0.001 \n", "\u001b[J77 0.0629752 0.977761 0.299763 0.919336 1857.31 0.001 \n", "\u001b[J78 0.0586612 0.979523 0.306034 0.922461 1881.03 0.001 \n", "\u001b[J79 0.059752 0.979869 0.311227 0.921289 1904.82 0.001 \n", "\u001b[J80 0.0571715 0.980213 0.304607 0.920703 1928.51 0.001 \n", "\u001b[J81 0.0573339 0.980136 0.315108 0.92168 1956.06 0.001 \n", "\u001b[J82 0.0560348 0.979847 0.321934 0.916992 1979.87 0.001 \n", "\u001b[J83 0.0553193 0.980613 0.315378 0.914648 2003.58 0.001 \n", "\u001b[J84 0.0531816 0.98129 0.318977 0.919531 2027.34 0.001 \n", "\u001b[J85 0.0560367 0.98097 0.310993 0.919141 2051.02 0.001 \n", "\u001b[J86 0.0535048 0.981534 0.317829 0.920117 2075.04 0.001 \n", "\u001b[J87 0.0522188 0.981571 0.31144 0.920313 2098.73 0.001 \n", "\u001b[J88 0.0526632 0.982156 0.318594 0.920703 2122.46 0.001 \n", "\u001b[J89 0.0528096 0.981445 0.309017 0.92207 2146.21 0.001 \n", "\u001b[J90 0.0499371 0.982928 0.313269 0.920508 2169.92 0.001 \n", "\u001b[J91 0.046129 0.984375 0.312747 0.919141 2182.89 0.0001 \n", "\u001b[J92 0.0442634 0.984642 0.308682 0.921484 2195.39 0.0001 \n", "\u001b[J93 0.0456881 0.98422 0.308501 0.920898 2208.13 0.0001 \n", "\u001b[J94 0.0450576 0.984553 0.311052 0.921484 2220.46 0.0001 \n", "\u001b[J95 0.0450287 0.985152 0.310078 0.920117 2232.59 0.0001 \n", "\u001b[J96 0.0444907 0.984486 0.312837 0.921289 2244.59 0.0001 \n", "\u001b[J97 0.0439379 0.985418 0.310588 0.92168 2256.65 0.0001 \n", "\u001b[J98 0.0430186 0.985352 0.310459 0.920508 2268.82 0.0001 \n", "\u001b[J99 0.0419429 0.985288 0.310179 0.92168 2281.02 0.0001 \n", "\u001b[J100 0.0421573 0.985574 0.31397 0.920898 2293.27 0.0001 \n", "Test accuracy: 0.917227\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "YkL06bZDMq6I" }, "source": [ "先程のData augmentationなしの場合は90%程度だったテスト精度が,学習データにaugmentationを施すことでおよそ1.8%程度向上していることが分かりました.\n", "\n", "損失と精度のグラフを見てみましょう." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "-ckf3ncLMq6J", "outputId": "0c1e38e1-9700-4bf5-912a-cd3f06e2c89e", "colab": { "base_uri": "https://localhost:8080/", "height": 279 } }, "source": [ "Image(filename='results/DeepCNN_cifar10_augmented_result/loss.png')" ], "execution_count": 44, "outputs": [ { "output_type": "execute_result", "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "tags": [] }, "execution_count": 44 } ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "H8mCPbI5Mq6L", "outputId": "a573cf7e-1da7-4556-c0bc-80474cbe86d7", "colab": { "base_uri": "https://localhost:8080/", "height": 279 } }, "source": [ "Image(filename='results/DeepCNN_cifar10_augmented_result/accuracy.png')" ], "execution_count": 45, "outputs": [ { "output_type": "execute_result", "data": { "image/png": "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\nAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": { "tags": [] }, "execution_count": 45 } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "Xz4qiWP2Mq6N" }, "source": [ "## Data Augmentationの簡単な使い方\n", "\n", "前述のようにデータセット内の各画像についていろいろな変換を行って擬似的にデータを増やすような操作をData Augmentationといいます.上では,オリジナルのデータセットクラスを作る方法を示すために変換の操作も`get_example()`内に書くという実装を行いましたが,実はもっと簡単にいろいろな変換をデータに対して行う方法があります.\n", "\n", "それは,`TransformDataset`クラスを使う方法です.`TransformDataset`は,元になるデータセットオブジェクトと,そこからサンプルしてきた各データ点に対して行いたい変換を関数の形で与えると,変換済みのデータを返してくれるようなデータセットオブジェクトに加工してくれる便利なクラスです.簡単な使い方は以下のようになります." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "nBly8lfhMq6N", "colab": {} }, "source": [ "from chainer.datasets import TransformDataset\n", "\n", "train_val, test_dataset = cifar.get_cifar10()\n", "train_size = int(len(train_val) * 0.9)\n", "train_dataset, valid_dataset = split_dataset_random(train_val, train_size, seed=0)\n", "\n", "\n", "# 行いたい変換を関数の形で書く\n", "def transform(inputs):\n", " x, t = inputs\n", " x = x.transpose(1, 2, 0)\n", " h, w, _ = x.shape\n", " x_offset = np.random.randint(4)\n", " y_offset = np.random.randint(4)\n", " x = x[y_offset:y_offset + h - 4,\n", " x_offset:x_offset + w - 4]\n", " if np.random.rand() > 0.5:\n", " x = np.fliplr(x)\n", " x = x.transpose(2, 0, 1)\n", " \n", " return x, t\n", "\n", "\n", "# 各データをtransform関数で処理して返すデータセットオブジェクト\n", "train_dataset = TransformDataset(train_dataset, transform)" ], "execution_count": 46, "outputs": [] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "6Q0dLAW6Mq6O" }, "source": [ "このようにして得られた新しい`train_dataset`は,自作のデータセットクラスと同じような変換処理を行った上でデータを返してくれるデータセットオブジェクトとなります." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "iJjZn9Q-V8m5" }, "source": [ "### ChainerCVを活用した変換処理\n", "\n", "さて,先ほどご紹介したコードでは,画像に対するランダムクロップ,及びランダムな左右反転の処理を自ら実装していました.もし,より多様な変換を行いたい場合,上記の`transform`関数に処理を追加していくことになりますが,一般的に用いられる変換処理をその度に自ら実装するのは手間です.そこで本項では最後に,[ChainerCV](http://chainercv.readthedocs.io/en/stable)[[Niitani 2017]](https://arxiv.org/abs/1708.08169)をご紹介します.ChainerCVは,Computer Visionに特化した機能が豊富に追加された,Chainerの補助パッケージとしての役割を担うオープンソース・ソフトウェアです." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "_dJ1-rCrMq6P", "outputId": "3b768979-fa09-4975-d2fb-5b3d21dd1ad4", "colab": { "base_uri": "https://localhost:8080/", "height": 397 } }, "source": [ "!pip install chainercv" ], "execution_count": 47, "outputs": [ { "output_type": "stream", "text": [ "Collecting chainercv\n", "\u001b[?25l Downloading https://files.pythonhosted.org/packages/e8/1c/1f267ccf5ebdf1f63f1812fa0d2d0e6e35f0d08f63d2dcdb1351b0e77d85/chainercv-0.13.1.tar.gz (260kB)\n", "\r\u001b[K |█▎ | 10kB 23.8MB/s eta 0:00:01\r\u001b[K |██▌ | 20kB 30.5MB/s eta 0:00:01\r\u001b[K |███▊ | 30kB 36.4MB/s eta 0:00:01\r\u001b[K |█████ | 40kB 35.8MB/s eta 0:00:01\r\u001b[K |██████▎ | 51kB 36.9MB/s eta 0:00:01\r\u001b[K |███████▌ | 61kB 39.9MB/s eta 0:00:01\r\u001b[K |████████▉ | 71kB 35.4MB/s eta 0:00:01\r\u001b[K |██████████ | 81kB 36.0MB/s eta 0:00:01\r\u001b[K |███████████▎ | 92kB 37.1MB/s eta 0:00:01\r\u001b[K |████████████▋ | 102kB 35.5MB/s eta 0:00:01\r\u001b[K |█████████████▉ | 112kB 35.5MB/s eta 0:00:01\r\u001b[K |███████████████ | 122kB 35.5MB/s eta 0:00:01\r\u001b[K |████████████████▍ | 133kB 35.5MB/s eta 0:00:01\r\u001b[K |█████████████████▋ | 143kB 35.5MB/s eta 0:00:01\r\u001b[K |██████████████████▉ | 153kB 35.5MB/s eta 0:00:01\r\u001b[K |████████████████████▏ | 163kB 35.5MB/s eta 0:00:01\r\u001b[K |█████████████████████▍ | 174kB 35.5MB/s eta 0:00:01\r\u001b[K |██████████████████████▋ | 184kB 35.5MB/s eta 0:00:01\r\u001b[K |████████████████████████ | 194kB 35.5MB/s eta 0:00:01\r\u001b[K |█████████████████████████▏ | 204kB 35.5MB/s eta 0:00:01\r\u001b[K |██████████████████████████▍ | 215kB 35.5MB/s eta 0:00:01\r\u001b[K |███████████████████████████▋ | 225kB 35.5MB/s eta 0:00:01\r\u001b[K |█████████████████████████████ | 235kB 35.5MB/s eta 0:00:01\r\u001b[K |██████████████████████████████▏ | 245kB 35.5MB/s eta 0:00:01\r\u001b[K |███████████████████████████████▍| 256kB 35.5MB/s eta 0:00:01\r\u001b[K |████████████████████████████████| 266kB 35.5MB/s \n", "\u001b[?25hRequirement already satisfied: chainer>=6.0 in /usr/local/lib/python3.6/dist-packages (from chainercv) (6.5.0)\n", "Requirement already satisfied: Pillow in /usr/local/lib/python3.6/dist-packages (from chainercv) (4.3.0)\n", "Requirement already satisfied: protobuf>=3.0.0 in /usr/local/lib/python3.6/dist-packages (from chainer>=6.0->chainercv) (3.10.0)\n", "Requirement already satisfied: six>=1.9.0 in /usr/local/lib/python3.6/dist-packages (from chainer>=6.0->chainercv) (1.12.0)\n", "Requirement already satisfied: filelock in /usr/local/lib/python3.6/dist-packages (from chainer>=6.0->chainercv) (3.0.12)\n", "Requirement already satisfied: typing-extensions<=3.6.6 in /usr/local/lib/python3.6/dist-packages (from chainer>=6.0->chainercv) (3.6.6)\n", "Requirement already satisfied: typing<=3.6.6 in /usr/local/lib/python3.6/dist-packages (from chainer>=6.0->chainercv) (3.6.6)\n", "Requirement already satisfied: numpy>=1.9.0 in /usr/local/lib/python3.6/dist-packages (from chainer>=6.0->chainercv) (1.17.4)\n", "Requirement already satisfied: setuptools in /usr/local/lib/python3.6/dist-packages (from chainer>=6.0->chainercv) (42.0.1)\n", "Requirement already satisfied: olefile in /usr/local/lib/python3.6/dist-packages (from Pillow->chainercv) (0.46)\n", "Building wheels for collected packages: chainercv\n", " Building wheel for chainercv (setup.py) ... \u001b[?25l\u001b[?25hdone\n", " Created wheel for chainercv: filename=chainercv-0.13.1-cp36-cp36m-linux_x86_64.whl size=537355 sha256=fc0aaac281e6d6effbb0699ea77604eacc16f6683691d9463803c54c192a746b\n", " Stored in directory: /root/.cache/pip/wheels/ea/10/01/e221beaa4b3d8341aa819a39ab8d4677457c79c81f521f3a94\n", "Successfully built chainercv\n", "Installing collected packages: chainercv\n", "Successfully installed chainercv-0.13.1\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "jsdEfeirMq6R" }, "source": [ "[ChainerCV](http://chainercv.readthedocs.io/en/stable)には,画像に対する様々な変換があらかじめ用意されています.\n", "\n", "- [ChainerCVで使える画像変換一覧](http://chainercv.readthedocs.io/en/stable/reference/transforms.html#image)\n", "\n", "例えば,上でNumPyを使って書いていたランダムクロップやランダム左右反転は,`chainercv.transforms`モジュールを使うと,それぞれ以下のように1行で書くことができます:\n", "\n", "```python\n", "x = chainercv.transforms.random_crop(x, (28, 28)) # ランダムクロップ\n", "x = chainercv.transforms.random_flip(x) # ランダム左右反転\n", "```\n", "\n", "`chainercv.transforms`モジュールを使って,`transform`関数をアップデートしてみましょう.ちなみに,`get_cifar10()`で得られるデータセットでは,デフォルトで画像の画素値の範囲が`[0, 1]`にスケールされています.しかし,`get_cifar10()`に`scale=255.`を渡しておくと,値の範囲をもともとの`[0, 255]`のままにできます.今回行われる処理は,以下の5つです:\n", "\n", "1. PCA lighting: 先行研究(AlexNet)の学習で使われていた方法で,色を変化させる変換処理を行います.\n", "2. Standardization: 訓練用データセット全体からチャンネルごとの画素値の平均・標準偏差を求めて標準化をします\n", "3. Random flip: ランダムに画像の左右を反転します\n", "4. Random expand: `[1, 1.5]`からランダムに決めた大きさの黒いキャンバスを作り,その中のランダムな位置へ画像を配置します\n", "5. Random crop: `(28, 28)`の大きさの領域をランダムにクロップします" ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "TbDNke8ZMq6S", "colab": {} }, "source": [ "from functools import partial\n", "from chainercv import transforms\n", "\n", "train_val, test_dataset = cifar.get_cifar10(scale=255.)\n", "train_size = int(len(train_val) * 0.9)\n", "train_dataset, valid_dataset = split_dataset_random(train_val, train_size, seed=0)\n", "\n", "mean = np.mean([x for x, _ in train_dataset], axis=(0, 2, 3))\n", "std = np.std([x for x, _ in train_dataset], axis=(0, 2, 3))\n", "\n", "\n", "def transform(inputs, mean, std, train=True):\n", " img, label = inputs\n", " img = img.copy()\n", " \n", " # Color augmentation\n", " if train:\n", " img = transforms.pca_lighting(img, 76.5)\n", " \n", " # Standardization\n", " img -= mean[:, None, None]\n", " img /= std[:, None, None]\n", " \n", " # Random flip & crop\n", " if train:\n", " img = transforms.random_flip(img, x_random=True)\n", " img = transforms.random_expand(img, max_ratio=1.5)\n", " img = transforms.random_crop(img, (28, 28))\n", " \n", " return img, label\n", "\n", "train_dataset = TransformDataset(train_dataset, partial(transform, mean=mean, std=std, train=True))\n", "valid_dataset = TransformDataset(valid_dataset, partial(transform, mean=mean, std=std, train=False))\n", "test_dataset = TransformDataset(test_dataset, partial(transform, mean=mean, std=std, train=False))" ], "execution_count": 48, "outputs": [] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "iNQZOwbAMq6S" }, "source": [ "では,standardizationとChainerCVによるPCA Lightingを追加した`TransformDataset`を使って学習をしてみましょう.\n", "\n", "これまでと同様,90エポックまで学習させておいたsnapshotを用いて,最後の10エポックだけ学習を行います." ] }, { "cell_type": "code", "metadata": { "colab_type": "code", "id": "jh6J1f48Mq6T", "outputId": "7dfeae90-41f1-491f-8e6a-49f2893be7d4", "colab": { "base_uri": "https://localhost:8080/", "height": 1000 } }, "source": [ "!wget https://github.com/japan-medical-ai/medical-ai-course-materials/releases/download/v0.1/DeepCNN_cifar10_augmented2_snapshot_epoch_90.npz\n", "\n", "reset_seed(0)\n", "\n", "model = train(DeepCNN(10), max_epoch=100, train_dataset=train_dataset, valid_dataset=valid_dataset, test_dataset=test_dataset, postfix='augmented2_', base_lr=0.1, lr_decay=(30, 'epoch'), snapshot='DeepCNN_cifar10_augmented2_snapshot_epoch_90.npz')" ], "execution_count": 49, "outputs": [ { "output_type": "stream", "text": [ "--2019-12-09 11:21:16-- https://github.com/japan-medical-ai/medical-ai-course-materials/releases/download/v0.1/DeepCNN_cifar10_augmented2_snapshot_epoch_90.npz\n", "Resolving github.com (github.com)... 13.229.188.59\n", "Connecting to github.com (github.com)|13.229.188.59|:443... connected.\n", "HTTP request sent, awaiting response... 302 Found\n", "Location: https://github-production-release-asset-2e65be.s3.amazonaws.com/153412006/5064a880-eeb7-11e8-8e8b-fddbe76ecd56?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20191209%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20191209T112116Z&X-Amz-Expires=300&X-Amz-Signature=bf6cac01b9855110a9abeb2df76a65e697c6226c2353f102c24da044d69f80ef&X-Amz-SignedHeaders=host&actor_id=0&response-content-disposition=attachment%3B%20filename%3DDeepCNN_cifar10_augmented2_snapshot_epoch_90.npz&response-content-type=application%2Foctet-stream [following]\n", "--2019-12-09 11:21:16-- https://github-production-release-asset-2e65be.s3.amazonaws.com/153412006/5064a880-eeb7-11e8-8e8b-fddbe76ecd56?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20191209%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20191209T112116Z&X-Amz-Expires=300&X-Amz-Signature=bf6cac01b9855110a9abeb2df76a65e697c6226c2353f102c24da044d69f80ef&X-Amz-SignedHeaders=host&actor_id=0&response-content-disposition=attachment%3B%20filename%3DDeepCNN_cifar10_augmented2_snapshot_epoch_90.npz&response-content-type=application%2Foctet-stream\n", "Resolving github-production-release-asset-2e65be.s3.amazonaws.com (github-production-release-asset-2e65be.s3.amazonaws.com)... 52.216.20.243\n", "Connecting to github-production-release-asset-2e65be.s3.amazonaws.com (github-production-release-asset-2e65be.s3.amazonaws.com)|52.216.20.243|:443... connected.\n", "HTTP request sent, awaiting response... 200 OK\n", "Length: 56734002 (54M) [application/octet-stream]\n", "Saving to: ‘DeepCNN_cifar10_augmented2_snapshot_epoch_90.npz’\n", "\n", "DeepCNN_cifar10_aug 100%[===================>] 54.11M 11.5MB/s in 6.0s \n", "\n", "2019-12-09 11:21:23 (8.96 MB/s) - ‘DeepCNN_cifar10_augmented2_snapshot_epoch_90.npz’ saved [56734002/56734002]\n", "\n" ], "name": "stdout" }, { "output_type": "stream", "text": [ "/usr/local/lib/python3.6/dist-packages/chainer/training/triggers/interval_trigger.py:92: UserWarning: The previous value of iteration is not saved. IntervalTrigger guesses it using current iteration. If this trigger is not called at every iteration, it may not work correctly.\n", " 'The previous value of iteration is not saved. '\n", "/usr/local/lib/python3.6/dist-packages/chainer/training/triggers/interval_trigger.py:104: UserWarning: The previous value of epoch_detail is not saved. IntervalTrigger uses the value of trainer.updater.previous_epoch_detail. If this trigger is not called at every iteration, it may not work correctly.\n", " 'The previous value of epoch_detail is not saved. '\n" ], "name": "stderr" }, { "output_type": "stream", "text": [ "epoch main/loss main/accuracy val/main/loss val/main/accuracy elapsed_time lr \n", "\u001b[J1 2.64248 0.137296 2.15132 0.175 23.5716 0.1 \n", "\u001b[J2 2.09025 0.202814 1.90949 0.248633 47.2547 0.1 \n", "\u001b[J3 1.92989 0.251647 1.80744 0.313867 70.8962 0.1 \n", "\u001b[J4 1.82033 0.296742 1.75358 0.319727 94.6262 0.1 \n", "\u001b[J5 1.70069 0.350717 1.59837 0.397266 118.252 0.1 \n", "\u001b[J6 1.56064 0.418435 1.6835 0.418359 141.967 0.1 \n", "\u001b[J7 1.45132 0.473691 1.30451 0.528711 165.613 0.1 \n", "\u001b[J8 1.33843 0.523815 2.81471 0.372656 189.382 0.1 \n", "\u001b[J9 1.27017 0.556019 1.61386 0.499023 213.846 0.1 \n", "\u001b[J10 1.20204 0.579972 1.46257 0.519141 237.532 0.1 \n", "\u001b[J11 1.14896 0.601252 1.1028 0.623633 265.125 0.1 \n", "\u001b[J12 1.10957 0.614428 1.17823 0.594141 288.775 0.1 \n", "\u001b[J13 1.07055 0.635387 1.00013 0.670898 312.476 0.1 \n", "\u001b[J14 1.04187 0.647058 1.07628 0.642383 336.226 0.1 \n", "\u001b[J15 1.00359 0.661066 1.00439 0.655859 360.038 0.1 \n", "\u001b[J16 0.971513 0.675503 0.8598 0.723828 383.802 0.1 \n", "\u001b[J17 0.941225 0.686301 1.09454 0.661328 407.665 0.1 \n", "\u001b[J18 0.917967 0.694869 0.998599 0.681055 431.468 0.1 \n", "\u001b[J19 0.905397 0.699586 0.811614 0.738281 455.224 0.1 \n", "\u001b[J20 0.874732 0.706188 0.714926 0.762695 479.061 0.1 \n", "\u001b[J21 0.86753 0.712607 0.850176 0.738477 506.629 0.1 \n", "\u001b[J22 0.858491 0.714844 0.95919 0.692187 530.459 0.1 \n", "\u001b[J23 0.845307 0.717637 1.12914 0.668164 554.185 0.1 \n", "\u001b[J24 0.827677 0.72785 0.827821 0.746484 577.974 0.1 \n", "\u001b[J25 0.821103 0.728715 0.7663 0.741602 601.76 0.1 \n", "\u001b[J26 0.816583 0.728321 0.763894 0.757812 625.472 0.1 \n", "\u001b[J27 0.805109 0.735596 0.74157 0.754492 649.375 0.1 \n", "\u001b[J28 0.809963 0.734152 0.742951 0.7625 673.099 0.1 \n", "\u001b[J29 0.792127 0.737149 0.692472 0.773633 696.895 0.1 \n", "\u001b[J30 0.783124 0.741965 1.02244 0.702734 720.621 0.1 \n", "\u001b[J31 0.604456 0.795898 0.394226 0.868359 748.179 0.01 \n", "\u001b[J32 0.523254 0.822227 0.379255 0.873242 771.92 0.01 \n", "\u001b[J33 0.502693 0.830078 0.360393 0.877734 795.747 0.01 \n", "\u001b[J34 0.484705 0.835627 0.351212 0.884766 819.578 0.01 \n", "\u001b[J35 0.465001 0.842192 0.348862 0.882031 843.291 0.01 \n", "\u001b[J36 0.45372 0.846613 0.339081 0.885742 867.053 0.01 \n", "\u001b[J37 0.450468 0.846043 0.335244 0.887695 890.763 0.01 \n", "\u001b[J38 0.439256 0.848411 0.331884 0.889453 914.524 0.01 \n", "\u001b[J39 0.430965 0.852475 0.324836 0.895312 938.351 0.01 \n", "\u001b[J40 0.424651 0.855447 0.370822 0.881641 962.135 0.01 \n", "\u001b[J41 0.418223 0.857 0.328078 0.89082 989.723 0.01 \n", "\u001b[J42 0.409156 0.860332 0.334291 0.888672 1013.41 0.01 \n", "\u001b[J43 0.410969 0.860574 0.338266 0.888281 1037.14 0.01 \n", "\u001b[J44 0.397083 0.862469 0.337938 0.889258 1060.81 0.01 \n", "\u001b[J45 0.390805 0.8661 0.31488 0.900586 1084.56 0.01 \n", "\u001b[J46 0.39124 0.866008 0.324671 0.893945 1108.24 0.01 \n", "\u001b[J47 0.390007 0.865101 0.320954 0.895117 1131.96 0.01 \n", "\u001b[J48 0.383439 0.868367 0.355809 0.890625 1155.62 0.01 \n", "\u001b[J49 0.380758 0.87065 0.314927 0.899805 1179.36 0.01 \n", "\u001b[J50 0.379198 0.870716 0.302073 0.903125 1203.09 0.01 \n", "\u001b[J51 0.371325 0.873019 0.317537 0.899805 1230.61 0.01 \n", "\u001b[J52 0.368561 0.874578 0.338393 0.891016 1254.34 0.01 \n", "\u001b[J53 0.366614 0.872975 0.318233 0.89707 1278.2 0.01 \n", "\u001b[J54 0.366082 0.874667 0.328654 0.892187 1301.94 0.01 \n", "\u001b[J55 0.365454 0.873331 0.311355 0.902148 1325.61 0.01 \n", "\u001b[J56 0.357191 0.876509 0.330824 0.895898 1349.36 0.01 \n", "\u001b[J57 0.361274 0.874667 0.320739 0.897461 1373.1 0.01 \n", "\u001b[J58 0.354885 0.878339 0.308104 0.901172 1396.78 0.01 \n", "\u001b[J59 0.359033 0.876931 0.316534 0.900586 1420.55 0.01 \n", "\u001b[J60 0.356422 0.876291 0.366406 0.888281 1444.25 0.01 \n", "\u001b[J61 0.314513 0.891513 0.261128 0.914062 1471.67 0.001 \n", "\u001b[J62 0.275813 0.905159 0.257487 0.916406 1495.37 0.001 \n", "\u001b[J63 0.268649 0.907804 0.253204 0.918164 1519.12 0.001 \n", "\u001b[J64 0.264412 0.908298 0.256485 0.918555 1542.84 0.001 \n", "\u001b[J65 0.261826 0.910511 0.253851 0.917773 1566.66 0.001 \n", "\u001b[J66 0.255704 0.911998 0.257955 0.916602 1590.48 0.001 \n", "\u001b[J67 0.25836 0.909566 0.256463 0.919141 1614.22 0.001 \n", "\u001b[J68 0.251792 0.912753 0.254393 0.920117 1638.04 0.001 \n", "\u001b[J69 0.251154 0.914508 0.25251 0.920508 1661.81 0.001 \n", "\u001b[J70 0.24735 0.91464 0.255754 0.91875 1685.83 0.001 \n", "\u001b[J71 0.241314 0.917268 0.253207 0.921094 1713.35 0.001 \n", "\u001b[J72 0.246059 0.914617 0.257668 0.920508 1737.18 0.001 \n", "\u001b[J73 0.238097 0.918213 0.257092 0.919727 1761.02 0.001 \n", "\u001b[J74 0.235832 0.918981 0.251519 0.919922 1784.77 0.001 \n", "\u001b[J75 0.236254 0.918857 0.253711 0.919531 1808.58 0.001 \n", "\u001b[J76 0.235273 0.917646 0.249922 0.920117 1832.36 0.001 \n", "\u001b[J77 0.233553 0.918635 0.251188 0.921094 1856.13 0.001 \n", "\u001b[J78 0.229216 0.920829 0.256883 0.921484 1879.92 0.001 \n", "\u001b[J79 0.231176 0.919877 0.254759 0.92207 1903.75 0.001 \n", "\u001b[J80 0.227571 0.921007 0.251693 0.920508 1927.51 0.001 \n", "\u001b[J81 0.229313 0.92041 0.257421 0.920508 1955.13 0.001 \n", "\u001b[J82 0.225018 0.922896 0.255896 0.919922 1978.98 0.001 \n", "\u001b[J83 0.223251 0.923478 0.25848 0.918555 2002.75 0.001 \n", "\u001b[J84 0.221238 0.924294 0.259179 0.920703 2026.56 0.001 \n", "\u001b[J85 0.222084 0.923411 0.251648 0.920313 2050.3 0.001 \n", "\u001b[J86 0.221973 0.924339 0.252463 0.920898 2074.11 0.001 \n", "\u001b[J87 0.217851 0.925147 0.252802 0.920898 2097.85 0.001 \n", "\u001b[J88 0.215969 0.925138 0.255438 0.921094 2121.65 0.001 \n", "\u001b[J89 0.217307 0.92294 0.253423 0.920313 2145.48 0.001 \n", "\u001b[J90 0.217241 0.925058 0.254931 0.919922 2169.54 0.001 \n", "\u001b[J91 0.210398 0.926336 0.248383 0.924023 2182.44 0.0001 \n", "\u001b[J92 0.202761 0.929131 0.248566 0.923828 2195.01 0.0001 \n", "\u001b[J93 0.202395 0.930686 0.248684 0.923633 2207.6 0.0001 \n", "\u001b[J94 0.205619 0.926794 0.25063 0.921875 2219.81 0.0001 \n", "\u001b[J95 0.207099 0.929088 0.251314 0.922852 2231.86 0.0001 \n", "\u001b[J96 0.198571 0.932692 0.250731 0.92168 2243.82 0.0001 \n", "\u001b[J97 0.200812 0.930331 0.250747 0.921875 2255.85 0.0001 \n", "\u001b[J98 0.204992 0.928689 0.250508 0.92207 2267.96 0.0001 \n", "\u001b[J99 0.203764 0.92922 0.248585 0.921289 2280.19 0.0001 \n", "\u001b[J100 0.202649 0.930331 0.25095 0.923047 2292.4 0.0001 \n", "Test accuracy: 0.92523736\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "HsuPDoGsMq6V" }, "source": [ "わずかに精度が向上しました.他にも,ResNet [He 2016]と呼ばれる有名なネットワーク構造を採用して学習を行うなど,簡単に試せる改善方法がいくつかあります.ぜひ色々と試してみてください.\n", "\n", "---\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "WD1oaVYTMq6Z" }, "source": [ "## 参考文献\n", "\n", "[Tokui 2015] Tokui, S., Oono, K., Hido, S. and Clayton, J., Chainer: a Next-Generation Open Source Framework for Deep Learning, Proceedings of Workshop on Machine Learning Systems(LearningSys) in The Twenty-ninth Annual Conference on Neural Information Processing Systems (NIPS), (2015)\n", "\n", "[Niitani 2017] Yusuke Niitani, Toru Ogawa, Shunta Saito, Masaki Saito, \"ChainerCV: a Library for Deep Learning in Computer Vision\", ACM Multimedia (ACMMM), Open Source Software Competition, 2017\n", "\n", "[Hidaka 2017] Masatoshi Hidaka, Yuichiro Kikura, Yoshitaka Ushiku, Tatsuya Harada. WebDNN: Fastest DNN Execution Framework on Web Browser. ACM International Conference on Multimedia (ACMMM), Open Source Software Competition, pp.1213-1216, 2017.\n", "\n", "[He 2016] Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun, \"Deep Residual Learning for Image Recognition\", CVPR 2016" ] } ] }