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になる。