0:00
みなさんこんにちは。
人工知能ラボの助手です。
前回は、TensorFlowでの回帰の実装を行う前に、
TensorFlowの基本的な扱いについて学びました。
今回からは、前回説明した①~⑥のステップに
則って回帰を実装していきましょう。
本当はこの記事で最後のステップまで説明をしようと
思ったのですが、分量が多くなってしまうので、2回に
分けて説明していこうと思います。
今回は①~③までを説明したいと思います。
それでは、今回は以下のデータを学習用データ
として使い、回帰分析を実装してみましょう。
(x,y)=(2,10),(3,14),(-2,1),(10,31),(-5,-6)
①に入る前に、必要ライブラリのインポートと
入力データの変数を作成しておきます
(普通は、入力データは別のファイル
から持ってくることが多いです)。
コード1
#ライブラリのインポート import tensorflow as tf import numpy as np import math #データの用意 data = np.array([2,1],[3,14],[-2,1],[10,3],[-5,-6]) data_x, data_y = np.hsplit(data,[1])
TensorFlowでは基本的に、pythonライブラリの一つ
であるNumPyの配列を扱います。なので、入力データ
もNumPy配列として定義しました。
また、入力データをNumPyのhsplitを用いて
説明変数(x)と目的変数(y)に分割しました。
それでは、ステップ①からプログラムを書いていきましょう
①入力データの形式を定義
入力データの定義にはTensorFlowの
placeholderクラスを使用します。
今回の入力データは、説明変数(x)、目的変数(y)ともに
ひとつなので、入力データは次のように定義します。
コード2
#入力データを定義 x = tf.placeholder('float', shape = [None, 1]) y_ = tf.placeholder('float', shape = [None, 1])
第1引数はデータ型、第2引数(shape)は入力データの形です。
shapeについてですが、一つ目の要素にはデータ数が入ります。
今回のデータ数は5ですが、データ数が変わっても対応できるように
基本的にはここはNone(指定なし)とします。
2つ目の要素には入力する説明変数、目的変数それぞれの数を
指定します。今回はともに1となります。
②③パラメータとモデルの定義
まずは、データセットをどのような式で表わすかを
定義します。
今回は、回帰の最も簡単な形である、y=ax+bとしましょう。
そうすると、今回使用するパラメータはxの重みaとバイアスbですね
以下のように重みとバイアスを定義します。
コード3
#パラメータとモデルの定義 a = tf.Variable(tf.truncated_normal([1], stddev=0.1) b = tf.Variable(tf.constant(1.0, shape=[1])) y = a*x + b
前回お話ししたように、パラメータの定義には
Variableクラスを使用します。
aを平均0、標準偏差0.1の正規分布に従った乱数で、
bを定数の1で発生させるよう定義しています。
今回は非常に単純な回帰なので、このような
設定をする必要がなくある程度適当な値でも大丈夫です。
ただ、ニューラルネットワーク等の機械学習アルゴリズムを実装
する際にこの値を使用することが多いため、その設定としました。
3行目ではモデル(数式)を定義しています。
今回はy=ax + bのみですが、実際には
複数行にわたることが多いです。
また、モデルの定義にはplaceholderとVariable
を使用してください。
ちなみに、この①~③の一連の操作は、回帰分析の
理論学習で学んだ
ステップ1:パラメータを含む数式モデルを仮定
に相当します。
それでは、今回はここまでにしておきましょう。
次回は④~⑥を行い、実際の学習結果
を見ていきたいと思います。
それでは、お疲れ様でした!
次回:TensorFlowによる回帰分析③
前回:TensorFlowによる回帰分析①