train_mnist.pyの出力を理解する。その1

まずは実行結果から理解してみたいと思います。
> python train_mnist.py
GPU: -1
# unit: 1000
# Minibatch-size: 100
# epoch: 20

epoch       main/loss   validation/main/loss  main/accuracy  validation/main/accuracy  elapsed_time
1           0.191074    0.100884              0.943267       0.9695                    53.3655
2           0.0737702   0.0817333             0.976967       0.9749                    104.784
(省略)
19          0.00937801  0.105006              0.997333       0.9812                    1013.19
20          0.00943264  0.121797              0.99735        0.9805                    1084.28
実行はしたものの、こちらは機械学習初心者。意味が分からないということで調べていきます。
「GPU: -1」はGPUを使わないということでいいとして、epochとかbatch-sizeとかわからんわー

まずは、「unit: 1000」について、調べみた。
ソースを見ると、次の箇所に答えがありそうだ。
self.l1 = L.Linear(None, n_units)  # n_in -> n_units
self.l2 = L.Linear(None, n_units)  # n_units -> n_units
self.l3 = L.Linear(None, n_out)  # n_units -> n_out
u_unitsが1000、n_outは10とほかの箇所にハードコードがあった。
このソースは、Chainerにおける、ニューラルネットワークのモデル定義に当たる箇所みたい。
図にするとこういう感じ。Chainerでは、ユニット間を定義するので、3層かと思いきや4層モデルになるみたい

L.Linearの第一引数がNoneなってるけど、Noneとすると実行時に必要な数を計算するみたい。
MNISTの手書画像は、28px*28pxなので実行時には、784となるはず(ここでは1ピクセル1unit)
つまり、
  • 入力層のunitは784
  • 中間層1のunitは1000
  • 中間層2のunitは1000
  • 出力層のunitは10
ということになる。出力層の10unitは解析結果の0~9への確率が入る模様。
つまり、画面表示された「# unit: 1000」は中間層のユニット数ということ

つぎは「# Minibatch-size: 100」を見てみる。
これは簡単で、手書き数字をいくつ学習するかというもの。つまり、100個の画像を読み込むぜ!って意味

つぎは「# epoch: 20」。エポックって読むみたい
これは学習回数に当たる。結果一覧には、1回学習当たりの結果が表示される
まとめると、

中間層は1000ユニットで、100個の手書き画像を20回学習するぜ!
ってことになる。

長くなってきたので、一覧の見方は次回記事にします。