Tutorial実装で確認するTensorFlow①(Tutorialsの概要とMNIST問題のサンプル実装の確認)|DeepLearningの実装 #2

f:id:lib-arts:20190530161346p:plain

ライブラリの使い方を中心に取り扱った記事は深い考察になりづらいのであまり書きたくないのですが、DeepLearning系は仕様の変化が早過ぎるので、DeepLearningの実装に関しては諸々のドキュメントのまとめを備忘録も兼ねてシリーズ化していければと考えています。
#1ではKerasのチュートリアルを元にMLP(MultiLayer Perceptron)やCNNの動作確認を行いました。

#2ではTensorFlowについて取り扱います。
以下目次になります。

1. TensorFlowの概要
2. TensorFlow Tutorialsの内容
3. MNIST問題のサンプルコードとその解説(Get Started with TensorFlow)
4. まとめ


1. TensorFlowの概要
まず1節ではTensorFlowについて簡単な概要の解説とインストールを行っていきます。

f:id:lib-arts:20190530202821p:plain

https://www.tensorflow.org/
上記が公式ドキュメントのキャプチャになります(バージョンアップが早く、それに合わせてドキュメントも変わっていくため、他のライブラリに比べ変化が早いということについて注意が必要です)。ドキュメントのトップページにはそれほど説明が多く書かれているわけではないので、それぞれ確認できればと思います。

An end-to-end open source machine learning platform

まず、上記ですが、end-to-end(DeepLearningのモデルは他のモデルに比べ、入力と出力しか意識することが少ないためそのことをend-to-endと表します)で実装するオープンソース機械学習のライブラリ(platform)だとされています。
あまり難しく考えすぎずにKerasと同様にDeepLearningの学習用のフレームワーク(ライブラリ)だと考えておくと良さそうです。
次にインストールについてですが、下記を実行することでインストールすることができます。

pip install tensorflow

バージョンの変化が早く、様々なコードが様々なバージョンを用いて実装されているので、それぞれの実装のリポジトリのREADME.meを確認し、それぞれの実装がどのバージョンを前提としているかは動作確認を行う際にチェックするようにすると良いと思います。

TensorFlow Core  |  TensorFlow
また上記のチュートリアルの情報はなかなか豊富なので、基本的な情報はこちらを確認すると良いと思います。
大体の概要とインストールについて取り扱えたので、2節ではTensorFlow Tutorialsについて俯瞰していきます。

 

2. TensorFlow Tutorialsの内容

https://www.tensorflow.org/tutorials/
1節では概要について取り扱ったので、2節ではTensorFlow Tutorialsについて取り扱っていきます。

f:id:lib-arts:20190530204457p:plain
まず上記がtutorialsのトップページになります。右下部分にMNISTを用いた簡単な実装についてまとまっています。このコードの詳細については3節でまとめますが、ぱっと見Kerasの書き方にかなり近づいていることがわかります。#1でまとめたようにKerasにはSequential APIとfunctional APIの二つが主にありますが、このコードではSequential APIを用いています。
また、この画面の左側には様々なタブがあり、応用的なDeepLearningの実装についてまとまっています。MNISTなどの単純なモデルにとどまらず、下記のように様々な応用用途におけるfundamentalなモデルの実装についてまとめられています。

・Generative models(生成モデル)
-> DCGANやVAE

・Images(画像処理)
-> Image Recognition、Pix2Pix(画像変換)、Image Segmentation(セグメンテーション)

・Sequences(系列データ)
-> Text generation、Translation with attention、Image cpationing


上記は並んでいる中で気になるものを抜粋しましたので、チュートリアルページではその他の実装についても紹介されています。

このようにチュートリアルでは様々な実装が紹介されており、これらを一つ一つ動かすだけでも様々なモデルについて試すことができます。

 

3. MNIST問題のサンプルコードとその解説(Get Started with TensorFlow)
3節ではMNIST問題のサンプルコードの実行と、内容の解説を行います。下記のコードを実行するとMNIST問題に関する識別問題を学習させることができます。

import tensorflow as tf
mnist = tf.keras.datasets.mnist

(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

model = tf.keras.models.Sequential([
    tf.keras.layers.Flatten(input_shape=(28, 28)),
    tf.keras.layers.Dense(512, activation=tf.nn.relu),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Dense(10, activation=tf.nn.softmax)
])
model.compile(optimizer='adam',
            loss='sparse_categorical_crossentropy',
            metrics=['accuracy'])

model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test)

実行結果は下記のようになります。

f:id:lib-arts:20190530205657p:plain
上記コードを把握していくにあたってまず意識すると良いのがKerasの実装です。

keras/mnist_mlp.py at master · keras-team/keras · GitHub
上記は同様の問題に対するKerasのチュートリアルコードの実装ですが、見比べることでほぼ同じように実装されていることがわかります。modelはtf.keras.models.Sequentialを呼んでいますが、keras.models.Sequentialと基本的には同様のAPI(インターフェース)になっているというのがわかります。
tf.keras.models.Sequentialはレイヤーの情報を引数の配列で与え、メソッドのtf.keras.models.Sequential.compileで誤差関数の設定や最適化について設定し、tf.keras.models.Sequential.fitで学習を実行、tf.keras.models.Sequential.evaluateでテストデータでの検証を行うという流れになっています。
これはKerasを踏襲しており、元々KerasのAPIはわかりやすいので直感的な理解がしやすい内容になっているかと思われます。


4. まとめ
#2ではTensorFlowのチュートリアルから多層パーセプトロン(MLP; Multi Layer Perceptron)について取り扱いました。
TensorFlow Tutorialsには応用トピックが豊富なので、#3では応用トピックの中から違う例をご紹介できればと思います。