Tensorflow ORゲートのモデルの機械学習(詳解デープラーニング3章)
◆目的:
・ORゲートの分離境界モデルを学習させる
・巣籠本(2017)の93ページ~
◆ORゲート
・いずれか一方の入力が1であれば、出力が1となる回路。
・大まかな流れ
◆実装:
(1)まずいつもの
import numpy as np import tensorflow as tf
(2)パラメータの定義
・こんな感じ
x = tf. placeholder(tf.float32, shape=[None, 2]) w = tf.Variable(tf.zeros([2,1])) b = tf.Variable(tf.zeros([1])) y = tf.nn.sigmoid(tf.matmul(x,w) + b) tf. set_random_seed(0)#乱数シード
(3)学習のときに使うパラメータt
t = tf.placeholder(tf.float32, shape=[None, 1])
(4)誤差関数は交差エントロピー
cross_entropy = - tf.reduce_sum(t * tf.log(y) + (1 -t) * tf.log(1-y))
(5)学習の式
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(cross_entropy)
(6)予測
correct_prediction = tf.equal(tf.to_float(tf.greater(y,0.5)),t)
(7)X,Y
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]]) Y = np.array([[0], [1], [1], [1]])
(8)初期化
init = tf.global_variables_initializer() sess = tf.Session() sess.run(init)
(9)学習、200回まわす
・Tensorflowでは、Sessionで計算を実施
for epoch in range(200): sess.run(train_step, feed_dict={ x: X, t: Y })
(10)学習結果の確認
・evalは発火/非発火の分類確認
⇔ tf.Variableの変数の値はevalでなくsess.run()で取得
classified = correct_prediction.eval(session=sess, feed_dict={ x: X, t: Y }) prob = y.eval(session=sess, feed_dict={ x: X }) print('classified:') print(classified) print() print('output probability:') print(prob)
(11)結果はこんな感じ↓
・学習されたパラメータを確認
縦ベクトルwの中の値2つが下記のように学習されたことが確認可能。
print('w:', sess.run(w))
→ w: [[ 3.61188436]
[ 3.61188436]]
◆Memo:
・パラメータbの値…print('b:', sess.run(b))で確認できる。
◆キーワード:
ORゲート、分離境界、ランダム、乱数データ、学習率、学習されたパラメータの確認
** 以上 **
(2017.7.17.)