Chainer:mnist_train.pyをちょっとだけ変更でCIFAR-10を学習させてみた


2017年 05月 04日

CIFAR-10のデータが取得できたのは前回わかった。
そうなったら、やはりいち早くディープラーニングをやってみたい。
一番てっとり早いのは、プログラムを書かないことだ。
ということで、横着なことを考えた。

今までMNISTのプログラム train_mnist.py をいじってきた。
ならば、このプログラムをちょっと変更するだけで、CIFAR-10に対応することはできないだろうかと考えるのが自然であろう。

そして、頑張らない作業をやった。
そして、diff がこれだけだ。
CIFAR-10$ diff ../mnist/train_mnist1.py train_cifar1.py
53c53
<     parser.add_argument('--number', '-n', type=int, default=60000,
---
>     parser.add_argument('--number', '-n', type=int, default=50000,
77c77
<     train, test = chainer.datasets.get_mnist()
---
>     train, test = chainer.datasets.get_cifar10()
CIFAR-10$
変更は、たった2個所である。

学習データが60000から50000に変更になったので、デフォルトの値を変えた。
何も指定がないときは、実際のデータのサイズに自動的に合わせるようにすれば、この変更は不要になる。

そして、データの取得先の変更を、chainer.datasetsに用意されているメソッド get_mnist() を get_cifar10() に変更した。
さすがこの変更はしないと、無理である。

たったこれだけの変更で、プログラムが動くであろうか。

MNISTは、28×28のグレースケールの画像である。
CIFARは、32×32のカラーの画像なので、32×32のR,G,Bのデータが入っていて、3x32x32の画像である。
これが、上記の最高に手抜きした変更で動くのであろか。
相当疑問である。


CIFAR-10$ python train_cifar1.py -g 0
GPU: 0
# number: 50000
# units: [1000, 1000]
# Minibatch-size: 100
# epoch: 20

結果は次回のお楽しみ
このあと予想されることは、

  1. エラーが起きて、止まってしまう。
  2. とりあえず動くが、意味不明な結果がでる。
  3. ちゃんと動いて、それなりの学習が行われたことが分かる。

さて、どれでしょう。