#TensorFlowの基本構文とコンセプト
公式ページのGetting Started With TensorFlowを試して、ポイントとなる点を解説していきます。この内容を理解してから「【入門者向け解説】TensorFlowチュートリアルMNIST(初心者向け)」のチュートリアルをすると理解が早いです(私はボケてすっ飛ばしていました)。
######参考リンク
- TensorFlowをWindowsにインストール Python初心者でも簡単だった件
- 【入門者向け解説】TensorFlowチュートリアルMNIST(初心者向け)
- TensorFlowチュートリアルMNIST(初心者向け)をTensorBoardで見える化
- TensorFlow APIメモ
- 【TensorBoard入門】TensorFlow処理を見える化して理解を深める
- 【TensorBoard入門:image編】TensorFlow画像処理を見える化して理解を深める
- 【TensorBoard入門:Projector編】TensorFlow処理をかっこよく見える化
- 【入門者向け解説】TensorFlowチュートリアルDeep MNIST
- TensorFlow理解のために柏木由紀さん顔特徴を調べてみた【前編】
#TensorFlowとは
TensorFlow言わずと知れたGoogle様が機械学習のために作ったオープンソースのライブラリです。
TensorFlowの**"Tensor"(テンソル)は簡潔に言うと多次元配列のこと**です(Google固有ではなく一般的な用語です)。Tensorの詳細に関してはTensorFlowを始める前に知っておくべきテンソルのこと(追記:より一般的な話題へ)の記事が素晴らしいです。
TensorFlowはそのTensorを扱うのに長けたライブラリです。そして、機械学習に最適化すべくCPUとGPUを最大限有効に使っています。
例えば、2コアのPCでMNISTの深層学習チュートリアルを実行すると下図のようにすぐにCPUをほとんど使い切ってくれます。
#TensorFlowの基本構文とコンセプト
TensorFlowの基本構文を見ながらコンセプトを解説します。
##Computational Graph
TensorFlowはComputational Graphというコンセプトに基づいており、コマンドはComputational Graphの構築と実行という2つに分類されます。
例えば、2つの定数を定義して、それらを出力する場合、C言語では以下のようになります(古い記憶なので少し違っているかもしれませんが、感覚的にそんなもんだ程度に思ってください)。
const double node1 = 3.0;
const double node2 = 4.0;
printf("%f, %f", node1, node2);
それを通常の言語感覚でTensorFlowで書くと、下記になります。
node1 = tf.constant(3.0, dtype=tf.float32)
node2 = tf.constant(4.0) # also tf.float32 implicitly
print(node1, node2)
しかし、上記で出力されるのは、下の結果です。定数の3.0と4.0出力されません。これは上記構文が**「Computational Graphの構築」だからです。「Computational Graph」は並列可能性、処理順序を考慮した処理計画**だと考えてください。
Tensor("Const:0", shape=(), dtype=float32) Tensor("Const_1:0", shape=(), dtype=float32)
実際に定数の値を出力するには、以下の構文で**「Computational Graphの実行」**をする必要があります。
sess = tf.Session()
print(sess.run([node1, node2]))
これで、ようやく3.0と4.0が下記のように出力されます。
[3.0, 4.0]
##まとめ
通常の言語処理と比較すると下図のようになります。Computational Graphによって構築(計画)と実行の2ステップになるのが特徴です。単純にDBにレコードを登録するような処理であれば、1CPUのみを使った通常の言語処理の方がシンプルでいいですが、機械学習やDeep Learningのように複雑で並列化メリットの大きい場合はTensorFlowの方が適切でしょう。
筆者の経験では、Spark, Hadoop, SAP HANAなんかもComputational Graphと近い形の処理並列化が可能です。