※現在、ブログ記事を移行中のため一部表示が崩れる場合がございます。
順次修正対応にあたっておりますので何卒ご了承いただけますよう、お願い致します。

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. ちゃんと動いて、それなりの学習が行われたことが分かる。

さて、どれでしょう。