2017/01/24
0:00

TensorFlowによる回帰分析①


ニューラルネットワークのプログラム(回帰)

みなさんこんにちは。
人工知能ラボの助手です。

前回までは、回帰分析の各ステップについて
長い間説明をしてきました。

そこで、せっかく色々と勉強してきたので、今回は
プログラム言語のpythonと、その機械学習ライブラリである
googleのTensorFlowを使って、回帰分析をプログラムで
実装してみたいとおもいます。



少し長くなるかもしれないので、今回はまずTensorFlowに
関する簡単な説明を行って、次回に回帰分析を実装する
という感じでやっていきましょう。

それでは早速ですが、TensorFlowについて説明していきます。
TensorFlowとは、google社がオープンソースとして公開している、
機械学習用のためのライブラリであり、python、C++などの言語に
対応しています。

また、自動微分などの便利な機能があり、機械学習のプログラムを
シンプルに記述することができるのが特徴です。

基本的には、以下の6ステップで機械学習を行うことができます。
① 入力データの形式を定義
② パラメータの定義
③ ①、②を用いて数式(モデル)を定義
④ 誤差関数の定義
⑤ 誤差関数の最小化手法や学習回数、
  学習率といった学習条件を決定
⑥ セッションを作成し、変数を初期化後に
  入力データを用いて学習を開始

早速、この手順に沿って回帰を実装と言いたいところですが、
長くなってしまうので今回はその前に必要な知識となる
TensoFlowの動かし方(主にセッション)について
説明をして終わりたいと思います。

実際に簡単なコードを見ながら確認していきましょう。
(python、TensorFlowの実行環境が構築
されていることを前提に進めていきます)

サンプル1
#tensorflowライブラリのインポート
import tensorflow as tf

#利用する変数や処理など必要なものを定義
s = tf.Variable(5)
a = 5
add = tf.add(s, a)

#変数の初期化処理
init = tf.initialize_all_variables()

#セッションの作成
sess = tf.Session()

#作成したセッション上の変数を初期化
sess.run(init)

#作成したセッション上で定義した処理を実行
print(sess.run(add))
 
実行結果
10

まず、2行目のimportでTensorFlowを呼び出します。
そして、5-7行目で変数や処理を定義しています。

tf.Variableは変数を定義するときに使うクラスです。
基本的には、重みとバイアスを定義するときに使う物
だと思っていてください。

次に、いったん10行目の初期化を飛ばして
13行目以降を見てください。

TensorFlowではこのように、
セッション(結果を書き込んで行くノートのようなもの)
を作成する必要があり、そのセッション上で処理を行う
ことで、学習などの記録を残していきます。
(このコードでの一連の処理を処理をクラス
とみれば、セッションはインスタンスに相当します)

もし、8行目の初期化以降をすべてコメントアウトし、
代わりに「print(add)」とした場合、エラーにはなりませんが、
期待した結果は返ってきません。

また、セッションを作成し学習等の計算を行う前には、
必ず変数の初期化を行います。
これは、とりあえず行うものだと思っていただければ大丈夫です。

初期化は、コードの10行目に書いてあるようにまず定義を行い、
それを16行目のようにセッションの中で利用するという形をとります。

セッションは複数作成することができます。
先ほどのものを少し変更した以下のコードを見てみてください。

サンプル2
#tensorflowライブラリのインポート
import tensorflow as tf

#利用する変数や処理など必要なものを定義
s = tf.Variable(5)
a = 5
b = 10
add_a = tf.add(s, a)
add_b = tf.add(s, b)

#変数の初期化処理
init = tf.initialize_all_variables()

#セッションの作成
sess1 = tf.Session()
sess2 = tf.Session()

#作成したセッション上の変数を初期化
sess1.run(init)
sess2.run(init)

#作成したセッション上で定義した処理を実行
print(sess.run(add_a))
print(sess.run(add_b))
 
実行結果
10
15

ふたつのセッション(sess1とsess2)を作成し、それぞれで
変数sに対し別の計算を行っています。
このように、セッションにより計算処理や学習の内容等
を変えることができます。また、利用するGPUなども
セッション別に分けることができるようです。

長くなってしまったので、今回はここまでにしておきましょう。
次回は先ほど書いた①-⑥のステップに則って、
回帰を実装してみたいと思います。


それでは、お疲れ様でした!

次回:TensorFlowによる回帰分析②