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

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


『 機械学習 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。