目次

2. プログラム実行法

2.1 ダウンロード

ファイル(CNN.zip) をダウンロードして、 適当なフォルダに展開してください。以下のPythonプログラムから成ります。

  1. CNN.py : 主プログラム
  2. labels.py : 各データセットのラベル
  3. fit.py : 学習プログラム
  4. myCNN.py : 自作CNNプログラム
  5. myResNet.py : 自作ResNetプログラム
  6. utils.py : 共通関数
  7. MNIST.py : MNIST, QMNIST, KMNIST, FashioinMNIST用プログラム
  8. EMNIST.py : EMNIST用プログラム
  9. CIFAR.py : CIFAR-10, CIFAR-100用プログラム
  10. K49.py : Kuzushiji-49用プログラム
  11. Kanji.py : KKanji, TKanji用プログラム
  12. Flowers102.py : Flowers102用プログラム

2.2 ソースコードの編集

Spyderまたはエディタを用いて主プログラム(CNN.py)を以下のように編集してください。

  1. 変数"DATA"にデータセット名を代入してください(いずれか1行のコメントを外す)
  2. 変数"restart"をTrueにすると前回終了した状態から継続することができます(同じDATAのとき)
  3. 変数"num_epochs"にエポック数を代入してください
  4. 変数"batch_size"にミニバッチサイズを代入してください(50~100が標準)
  5. 画像表示用の関数"_plot_images"のパラメーターを適当に設定してください
  6. 関数utils.torch_seedの引数に適当な正の整数を代入すると乱数の種が変わり計算結果が少し変わります

2.3 プログラムの実行

プログラムを実行するには以下の2通りがあります。

(1) Spyder

  1. [ファイル]→[開く]メニューでCNN.pyとデータセットに対応したPythonファイルを開く
  2. 上記ファイルの内容を確認し、必要なら編集する
  3. CNN.pyタブをアクティブにした後、[実行]→[実行]メニューをクリックする
  4. IPythonペインに計算経過が表示される
  5. 計算が終了すると図形出力が行われる

(2) Anaconda Prompt

  1. スタートメニューから"Anaconda Prompt"を起動する
  2. cdコマンドでCNN.pyがあるフォルダに移動する
  3. エディタでCNN.pyとデータセットに対応したPythonファイルを開いて内容を確認し、必要なら編集する
  4. 以下のコマンドを実行する
    $ python CNN.py
  5. コンソールに計算経過が表示される
  6. 計算が終了すると図形出力が行われる(一つのウィンドウを閉じると次のウィンドウが表示される)

2.4 計算経過の表示

計算を開始すると端末に以下のようなメッセージが表示されます。 各行の内容は以下の通りです。
 エポック番号 損失 正解率[%] (正解数/テストデータ総数) 経過時間(エポック計算時間)[秒]

MNIST, 自作CNN (device=cuda:0)
train: 60000, test: 10000, classes: 10, epochs: 5
   0 2.30565  9.580 (958/10000)     1.4(  1.4)[sec]
   1 0.04068 98.750 (9875/10000)    11.8( 10.5)[sec]
   2 0.02932 99.110 (9911/10000)    22.2( 10.4)[sec]
   3 0.03544 99.060 (9906/10000)    32.5( 10.3)[sec]
   4 0.02482 99.190 (9919/10000)    42.9( 10.4)[sec]
   5 0.02696 99.060 (9906/10000)    53.2( 10.3)[sec]
max accuracy 99.190
Save MNIST.pth
初回は訓練を行わずにテストのみ行います。

2.5 図形出力

計算が終了すると以下の2通りの図形が出力されます。

(1) 損失と正解率の経過
CNN.pyのutils.show_history関数がONのとき表示されます。

(2) テスト画像とそのラベル
CNN.pyの_plot_images関数がONのとき表示されます。
必要なら以下の変数を適当に編集してください。

  1. w, h : ウィンドウの幅と高さ(インチ)
  2. nrow, ncol : 縦と横の画像数
  3. start : 図形表示する最初のデータ番号(既定値=0)
  4. step : 図形表示するデータ番号の間隔(既定値=1)
  5. thres : データ数がこれ以上の画像のみ表示する(既定値=0)
  6. fontsize : ラベルの大きさ(ピクセル)
  7. incorrect, start : incorrect=Falseのときはstartで始まるテストデータを表示し、 incorrect=Trueのときはstartで始まる不正解テストデータを表示する

2.6 GPU計算時間

表2-1に各モデルについてエポックあたりのGPUとCPUの計算時間を示します。
PyTorchはGPU向けに高度にチューニングされていることがわかります。
GPUはCPUの6~16倍速くなります。以後の計算はすべてGPUで行います。

表2-1 計算時間(MNIST, Adam, エポックあたり)
モデル GPU CPU CPU/GPU比
CNN6 (128ch) 12秒186秒16
自作ResNet (4b,128ch)14秒210秒15
ResNet18 14秒 88秒 6