ayihiscope

主に情報系の話題が好きな大学生の雑記!

TensorFlowのチュートリアルにあるCIFAR-10を動かしてみる

f:id:ayihis:20160730174314p:plain

TensorFlowを触るとなると,MNISTの次にやりたくなるのはコレだよね.

自分の作業メモも兼ねて軽くまとめました.

CIFAR-10について

機械学習を使った画像認識の実験でよく使われるデータセットの事

CIFAR-10データセットは32ピクセル四方のカラー画像60000枚のデータセット

飛行機,車,鳥,猫,鹿,犬,蛙,馬,船,トラックの10種類の画像がそれぞれ6000枚ずつある.

各種類の画像の6000枚のうち5000枚が学習用,残り1000枚がテスト用となっている.

ちなみに,CIFAR-100っていう100種類の分類のデータセットもあるようだ.

今回はやらないけど.

参考

CIFAR-10 and CIFAR-100 datasets

CIFAR-10 - 人工知能に関する断創録

TensorFlowの環境構築

公式ページを参考にどうぞ

Download and Setup

CIFAR-10用のコードを落とす

これは若干二度手間っぽいけど,GitHubからTensorFlowのリポジトリを落としてくる.

$ git clone git@github.com:tensorflow/tensorflow.git ~/どこか好きな所

GitHub - tensorflow/tensorflow: Computation using data flow graphs for scalable machine learning

CIFAR-10のコードは,落としてきたリポジトリ

tensorflow/tensorflow/models/image/cifar10

にある.

TensorFlowのチュートリアルを動かしてみる

チュートリアル翻訳した記事書いてる人いた

qiita.com

ここでは,とりあえず,手を動かして試してみたい

何も考えずに動かしてみる

$ cd ~/ほげほげ/tensorflow/tensorflow/models/image/cifar10
$ python cifar10_train.py
>> Downloading cifar-10-binary.tar.gz 100.0%
Successfully downloaded cifar-10-binary.tar.gz 170052171 bytes.
Filling queue with 20000 CIFAR images before starting to train. This will take a few minutes.
2016-08-01 21:13:17.109318: step 0, loss = 4.68 (8.6 examples/sec; 14.802 sec/batch)
2016-08-01 21:13:27.100278: step 10, loss = 4.66 (165.0 examples/sec; 0.776 sec/batch)
2016-08-01 21:13:36.299397: step 20, loss = 4.64 (136.1 examples/sec; 0.941 sec/batch)
2016-08-01 21:13:45.776021: step 30, loss = 4.62 (129.6 examples/sec; 0.987 sec/batch)
2016-08-01 21:13:56.667369: step 40, loss = 4.60 (114.8 examples/sec; 1.115 sec/batch)
2016-08-01 21:14:07.029648: step 50, loss = 4.58 (152.7 examples/sec; 0.838 sec/batch)
2016-08-01 21:14:16.997231: step 60, loss = 4.57 (144.2 examples/sec; 0.888 sec/batch)
・・・

って感じで何も考えなくてもCIFAR-10のデータを落とす所から学習が進んでいく.

これ,普通のノートPCだと数日動きっぱなしになるので,とりあえずCtrl+Cで終了させる

コードの構成

ここでチュートリアルから,中のコードがどんな感じなのか見ていく

ファイル名 目的
cifar10_input.py CIFAR-10のバイナリファイルを読み込む
cifar10.py CIFAR-10のモデルを構築する
cifar10_train.py CPUまたはGPUでCIFAR-10のモデルを訓練する
cifar10_multi_gpu_train.py マルチGPU環境でCIFAR-10のモデルを訓練する
cifar10_eval.py CIFAR-10のモデルの予測性能を評価する

とりあえず,訓練が終わったとして

cifar10_train.pyの訓練回数をめっちゃ少なくしてみる

tf.app.flags.DEFINE_integer('max_steps', 1000,
                            """Number of batches to run.""")

100000くらいだったのを1000にしてみた.

するとたぶん数分~十数分で処理が終わる

とりあえず,どんな感じになるのか見たいという目的なので

精度とかもろもろは気にしない

評価

% python cifar10_train.py
Filling queue with 20000 CIFAR images before starting to train. This will take a few minutes.
2016-08-02 14:43:02.291706: step 0, loss = 4.67 (8.1 examples/sec; 15.756 sec/batch)
2016-08-02 14:43:11.640866: step 10, loss = 4.65 (155.6 examples/sec; 0.822 sec/batch)
2016-08-02 14:43:22.731339: step 20, loss = 4.64 (138.5 examples/sec; 0.924 sec/batch)
・
・
・
2016-08-02 14:58:13.674663: step 970, loss = 3.32 (159.1 examples/sec; 0.805 sec/batch)
2016-08-02 14:58:22.554723: step 980, loss = 3.24 (163.2 examples/sec; 0.784 sec/batch)
2016-08-02 14:58:30.544634: step 990, loss = 3.19 (164.6 examples/sec; 0.778 sec/batch)

cifar10_eval.pyで評価できるらしい

とりあえず動かしてみる

% python cifar10_eval.py
2016-08-02 15:00:00.740645: precision @ 1 = 0.168

ん?精度16%??

さすがに1000 stepは少なすぎたかな〜(笑)

TensorBoard

デフォルトで動かしただけなので

訓練したログデータは

/tmp/cifar10_train

にいると思います.

TensorFlowは結果とかネットワークとかを可視化してくれる便利なTensorBoardというのがついています.

とりあえず,このログで立ち上げてみる

% tensorboard --logdir=/tmp/cifar10_train
Starting TensorBoard b'16' on port 6006
(You can navigate to http://0.0.0.0:6006)

さて,ウェブブラウザから

localhost:6006

にアクセスしてみる.

f:id:ayihis:20160802152801p:plain

お,なんかいい感じになってる.

とりあえずここまで〜!

動かし方は分かったので

コードを編集しながら自分のプログラムを作ってみようと思った!!

参考

kivantium.hateblo.jp

blog.brainpad.co.jp

memo.sugyan.com