TensorFlowで一次方程式を解く。
TensorFlowを用いて一次方程式(y=a*x+b)の解を求めてみる。TensorFlowを使わなくても解析的に簡単に解は出せるが、
あえてTensorFlowで訓練させた結果として解を出してみる。
TensorFlowで y = a*x + b のグラフを作り、yが0になるように学習を行う。
# 方程式の解を求める。 # y = ax+b において、y=0となるxを求める。 # xをVariableとし学習対象とする。 # 係数a,bは定数とする。 import tensorflow as tf #------------------------------------------- # モデル定義 a = tf.constant(2.0, name="const_a") b = tf.constant(3.0, name="const_b") x = tf.Variable(10.0, name="val_x") y = a*x + b # 評価用変数 # 求めたいのはy = 0となる状態であるが、 # minimize(y) とすると、y が0超えて負数をどこまでも降りてしまうため、 # 自乗し、0に収束していくようにする。 loss = tf.square(y) tf.summary.scalar("x", x) tf.summary.scalar("y", y) tf.summary.scalar("loss", loss) # 訓練 train = tf.train.GradientDescentOptimizer(0.01).minimize(loss) # 初期化 init = tf.global_variables_initializer() summary_op = tf.summary.merge_all() #------------------------------------------- # 実行 with tf.Session() as sess: summary_writer = tf.summary.FileWriter("log", sess.graph) sess.run(init) for i in range(100): sess.run(train) print(sess.run(x)) summary_str = sess.run(summary_op) summary_writer.add_summary(summary_str, i)
実行結果、100回ループ後のxの値は -1.497249 となった。
学習率を上げれば、もっと早く、-1.5になる。