train_mnist.pyの出力を理解する。その1
まずは実行結果から理解してみたいと思います。
「GPU: -1」はGPUを使わないということでいいとして、epochとかbatch-sizeとかわからんわー
まずは、「unit: 1000」について、調べみた。
ソースを見ると、次の箇所に答えがありそうだ。
このソースは、Chainerにおける、ニューラルネットワークのモデル定義に当たる箇所みたい。
図にするとこういう感じ。Chainerでは、ユニット間を定義するので、3層かと思いきや4層モデルになるみたい
L.Linearの第一引数がNoneなってるけど、Noneとすると実行時に必要な数を計算するみたい。
MNISTの手書画像は、28px*28pxなので実行時には、784となるはず(ここでは1ピクセル1unit)
つまり、
つまり、画面表示された「# unit: 1000」は中間層のユニット数ということ
つぎは「# Minibatch-size: 100」を見てみる。
これは簡単で、手書き数字をいくつ学習するかというもの。つまり、100個の画像を読み込むぜ!って意味
つぎは「# epoch: 20」。エポックって読むみたい
これは学習回数に当たる。結果一覧には、1回学習当たりの結果が表示される
まとめると、
中間層は1000ユニットで、100個の手書き画像を20回学習するぜ!
ってことになる。
長くなってきたので、一覧の見方は次回記事にします。
> 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_outu_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
つまり、画面表示された「# unit: 1000」は中間層のユニット数ということ
つぎは「# Minibatch-size: 100」を見てみる。
これは簡単で、手書き数字をいくつ学習するかというもの。つまり、100個の画像を読み込むぜ!って意味
つぎは「# epoch: 20」。エポックって読むみたい
これは学習回数に当たる。結果一覧には、1回学習当たりの結果が表示される
まとめると、
中間層は1000ユニットで、100個の手書き画像を20回学習するぜ!
ってことになる。
長くなってきたので、一覧の見方は次回記事にします。