TensorFlow始めました。

Google提供の機械学習ライブラリTensorFlow(テンソルフロー)。インターフェース誌ではラズパイに絡めて特集が組まれていました。
最近ホットなディープラーニングを試すべく、TensorFlow公式のチュートリアルを参考に、簡単なプログラムを書きながら学びたいと思います。

1. 下準備

TensorFlowは、Linux、MacOS、Windowsで動作し、Python、C++、JAVA用のAPIが用意されていますが、今回は、Mac上でPython APIを使いました。

 

MacでPythonとTensorFlowの環境を構築する方法はこちら。

pyenvとpyenv-virtualenvでMacのPython環境を整える。

pyenv + pyenv-virtualenvでtensorflow環境を作ったはいいけど、TensorFlowのインストールを忘れていた。

 

Python用のIDEはPyCharmがお勧め。

Python向けのIDE: PyCharm

 

グラフ描画のためにMatplotLibを追加します。
TensorFlowにもグラフという用語が登場しますが別物です。Matplotlibが扱うのは棒グラフとか折れ線グラフとかのグラフです。

Pythonでグラフ描画: Matplotlib

 

2. TensorFlow 初めの一歩

Getting Started With TensorFlow“を参考に、TensorFlowについて学習します。

2.1 Tensorとは

TensorFlowの中核であるデータ型がtensor(テンソル)です。任意の次元の配列であり、配列の次元に応じたrankという属性を持ちます。
入れ子が深いほどrankが高くなります。つまり、連続する”[“を数えれば、そのtensorのランクが分かります。

tensorの形状shapeは特に大事です。tensor同士を演算するとき、間違ったshapeの組み合わせだとエラーが発生して泣きを見ます。

tensorrankshape備考
1.0( )スカラー
[1., 2., 3.]1(1, 3)ベクトル
[[1., 2., 3.], [4., 5., 6.]]2(2, 3)行列
[[[[1., 2., 3.]], [[7., 8., 9.]]]3(2 x 1 x 3)

2.2グラフとは

グラフといっても棒グラフとか折れ線グラフのグラフではありません。

グラフ理論(グラフりろん、英: graph theory)は、ノード(節点・頂点)の集合とエッジ(枝・辺)の集合で構成されるグラフに関する数学の理論である。

Wikipedia: グラフ理論

TensorFlowは、データフローをグラフで表します。そしてグラフの「定義」と「実行」を2つのセッションに分離して別々に記述します。

2.2.1 グラフの定義

足し算を実現する簡単なグラフをPythonで記述してみます。

実行結果は次のとおり。

node3に足し算結果の 3+4=7が入っているのかと思いきやそうではありません。
上のコードはグラフを定義しているだけで、実際に計算を行っていないからです。
node1, 2, 3にはグラフを構成する3つのTensorが入っています。

グラフを可視化したのが次の図です。グラフ理論で言うところの、丸と楕円がノード、矢印がエッジに相当します。

2.2.2 グラフの実行

グラフを実行するセッションを作ります。
そのセッションの中でrunメソッドを実行すると、先ほど定義した定数や計算結果が表示されます。

実行結果は、次のとおりです。
定義した定数と計算結果が表示されました。

 

以上のコードを次にまとめて記載しておきます。

 

さて、これじゃあ何のためにTensorFlowを使うのか全然わからんという声が聞こえそうですが、tensorという型のデータを、グラフを使って処理するというところだけでも理解できればしめたものです。

次回は、「定義したグラフに対して、外部からどうやってデータを渡してそれを処理するか」を解説する予定です。