• AI

TensorFlow入門 – その2(TensorFlowの基礎説明)

TensorFlow入門(インストールからモデルの構築~訓練~活用まで)

FlyData AI teamの金です。
本記事を含め3つの記事ではディープラーニングフレームワークの中で一番人気の TensorFlow について書いていきます。
今回は2回目の記事となります。

シリーズ全体の目次

  • TensorFlow入門 – その1(TensorFlowのインストール)
  • TensorFlow入門 – その2(TensorFlowの基礎説明) ←今回はこちら
  • TensorFlow入門 – その3(数字認識モデルの構築)

TensorFlow入門 – その2(TensorFlowの基礎説明)

概要

TensorFlow は全ての計算を「テンソル (Tensor) の演算グラフ」ベースでおこないます。
ここでいう「Tensor」とは多次元配列のことです。
「演算グラフ」は、例えばディープラーニングモデルの中の数式演算を、以下のようにグラフとして捉えたものを言います。

 

演算グラフのような抽象的な説明はここまでにして、ここからは「演算をどのように実行し、どのようにモデルを構築するのか」について具体的に説明していきます。
ひとまずは「何らかの目的に合うグラフを作成し、グラフを用いて演算をおこなう」という認識で大丈夫です。

基本文法&コード

全てのコードは https://github.com/kdrl/TensorFlow-Tutorial に公開されていますが、この記事ではコードを走らせなくても流れがわかるように書いていきます。

TensorFlow の基本的な使い方

もっとも基本的な使い方について説明します。

上記のコードでは TensorFlow を用いて定数を宣言し,それを出力しています。
まず上から説明すると、1行目で tensorflow を import します。ここで tensorflow-gpu でインストールしたとしても import の時には同じく tensorflow だけでOKです。

次に4行目で定数を宣言しています。
ポイントは定義した定数をそのまま print しても値が表示されないということです。
これはなぜかというと、宣言部ではグラフを作るだけであり、実行するのはまた別の話だからです。
(Python なのに Python らしくないですが)TensorFlow ではこのような造りになっています。

上記の概要で説明した通り、TensorFlow では「初めに全ての演算グラフを作ってからグラフを実行することで、やりたい演算をおこなう」ことになります。
では「実行はどうするのか?」ですが,そのために「セッション」というものを使います。
セッションは8行目以降の部分ですが,このようにすれば宣言した定数の値が出力することができます。

基本演算

TensorFlow を用いた基本演算のやり方を説明します。

上記コードでは TensorFlow を用いて,足し算や引き算などの基本演算をおこなっています。
コードそのままなので詳細は割愛しますが、演算に用いる値が int 型か float 型かによって結果が変化する場合があるので注意してください。

変数の使い方

TensorFlow で変数を用いる方法について説明します。

上記のコードでは入力を与えて、定義した数式にしたがって値を計算し、画面に出力しています。
上から順番に説明していきます。

まず、入力に与える行列を numpy で生成しています。
そして、その入力を受け入れることのできる変数を作っています。
この変数は、他の変数と区別して placeholder と呼びます。
この placeholder に実際に値を入れるには、セッションを実行する run 関数を走らせる際に引数として入力する必要があります。

次に変数を宣言します。
コードにコメントを入れているので繰り返しになってしまいますが、変数の値は初期化が必要です。
何もしなかった場合は default の値になるのですが、今回は正規分布にしたがって初期化をしています。
ただし、ここの部分は宣言部であり,この行が実行されたとしても、実際に値が初期化されるわけではないことに注意してください。

次に数式の定義です。
特に難しいことはありませんが、broadcast という概念を知らないと違和感を感じるかもしれません。
行列の演算をしているのに、行列の形があっていないからです。
コードの中でも補足説明を書いていますが、詳細は boardcast を参照してください。

最後に実行部です。
変数が定義されている場合、値の初期化のために tf.global_variables_initializer() が必要となる点だけ注意しておけば、特に目新しいことはありません。
グラフを実行して得られる数値は numpy の行列になっているので,残りは broadcast を理解しやすいように補足説明を入れています。

TensorFlow で関数の学習をしてみよう(恒等関数)

TensorFlow を用いた,勾配法による重みの調整による線形関数(今回は恒等関数)の学習をおこないます。

上記のコードでは、恒等関数 x=f(x) を勾配降下法によって学習します。
基本的にはコードに書いている通りですが、いくつか補足します。

確率勾配法のため用いた tf.train.GradientDescentOptimizer(learning_rate=0.1) は直感的に理解しやすいですが、確率勾配法を知らない人はここから理解が難しくなるはずです。
大学学部レベルの数学の知識が必要となりますが、正確に理解するにはこちらの記事など(他にもWeb上にたくさんあると思います)を参照してください。

ひとことで言うと勾配降下法は変数の値を学習させる方法の一つです.

TensorFlow で演算を実行するにはセッションが必要でした。
ここの最適化も同様で、ここでは train_output を求めるように演算しています。
しかし、これはインタフェースであり「実際に train_output という変数の値がどうなっているか」は重要でないため、その点は注意しましょう。(確認してみると None が入ってます。)

for 文で1,000回勾配降下法にもとづいて変数の値を更新させたら、目的通り正しい学習ができたことがわかります。
(なお、勾配降下法は常に成功するわけではなく、きわめて初期値に依存します。今回のコードではその初期値を操作しているので学習がうまくできていますが・・・)

まとめ

本記事では TensorFlow の基本的な使い方から、恒等関数を学習する例までを扱いました。
TensorFlow のチュートリアル的な記事は他にも沢山あるので色々と参照してみください。
公式チュートリアルも難しいと敬遠せずに、チャレンジしてみることを強くお勧めします。

参照URL

https://www.tensorflow.org/tutorials/
https://github.com/aymericdamien/TensorFlow-Examples
https://github.com/golbin/TensorFlow-Tutorials
https://github.com/Hvass-Labs/TensorFlow-Tutorials

関連記事

  1. TensorFlow入門 – その1(TensorFlowのインストー…

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。