LoginSignup
38
53

More than 5 years have passed since last update.

【入門者向け解説】TensorFlow基本構文とコンセプト

Last updated at Posted at 2017-06-25

TensorFlowの基本構文とコンセプト

公式ページのGetting Started With TensorFlowを試して、ポイントとなる点を解説していきます。この内容を理解してから「【入門者向け解説】TensorFlowチュートリアルMNIST(初心者向け)」のチュートリアルをすると理解が早いです(私はボケてすっ飛ばしていました)。

参考リンク

TensorFlowとは

TensorFlow言わずと知れたGoogle様が機械学習のために作ったオープンソースのライブラリです。
TensorFlowの"Tensor"(テンソル)は簡潔に言うと多次元配列のことです(Google固有ではなく一般的な用語です)。Tensorの詳細に関してはTensorFlowを始める前に知っておくべきテンソルのこと(追記:より一般的な話題へ)の記事が素晴らしいです。
TensorFlowはそのTensorを扱うのに長けたライブラリです。そして、機械学習に最適化すべくCPUとGPUを最大限有効に使っています。
例えば、2コアのPCでMNISTの深層学習チュートリアルを実行すると下図のようにすぐにCPUをほとんど使い切ってくれます。
20.CPU_Full.JPG

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]

図解するとこんな感じです。
30.ComputationalGraph01.JPG

まとめ

通常の言語処理と比較すると下図のようになります。Computational Graphによって構築(計画)と実行の2ステップになるのが特徴です。単純にDBにレコードを登録するような処理であれば、1CPUのみを使った通常の言語処理の方がシンプルでいいですが、機械学習やDeep Learningのように複雑で並列化メリットの大きい場合はTensorFlowの方が適切でしょう。
筆者の経験では、Spark, Hadoop, SAP HANAなんかもComputational Graphと近い形の処理並列化が可能です。
30.ComputationalGraph02.JPG

38
53
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
38
53