TensorFlowのチュートリアルにあるCIFAR-10を動かしてみる
TensorFlowを触るとなると,MNISTの次にやりたくなるのはコレだよね.
自分の作業メモも兼ねて軽くまとめました.
CIFAR-10について
機械学習を使った画像認識の実験でよく使われるデータセットの事
CIFAR-10データセットは32ピクセル四方のカラー画像60000枚のデータセット.
飛行機,車,鳥,猫,鹿,犬,蛙,馬,船,トラックの10種類の画像がそれぞれ6000枚ずつある.
各種類の画像の6000枚のうち5000枚が学習用,残り1000枚がテスト用となっている.
ちなみに,CIFAR-100っていう100種類の分類のデータセットもあるようだ.
今回はやらないけど.
参考
CIFAR-10 and CIFAR-100 datasets
TensorFlowの環境構築
公式ページを参考にどうぞ
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のチュートリアルを動かしてみる
チュートリアル翻訳した記事書いてる人いた
ここでは,とりあえず,手を動かして試してみたい
何も考えずに動かしてみる
$ 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
にアクセスしてみる.
お,なんかいい感じになってる.
とりあえずここまで〜!
動かし方は分かったので
コードを編集しながら自分のプログラムを作ってみようと思った!!