# モジュールをインポートする
import tensorflow as tf
import numpy as np
# 参考用データを用意する
# (0.0 – 1.0) の間の乱数100個生成する
x_data = np.random.rand(100).astype(np.float32)
y_data = x_data*0.1 + 0.3
# これから本番
# もしx_dataとy_dataだけ貰って、例えば試験のデータなど
# x、yといったいどんな関係が知りたい
# つまり0.1と0.3最初がわからない
# 0.1をWeightsに替えて、初期値を(-1,1)の間のある値にする
Weights = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
# 0.3をbiasesに替えて、初期値を0にする
# 実は、Weightsとbiasesの初期値は何てもいい、効率の話だと思う
biases = tf.Variable(tf.zeros([1]))
# 計算式を作成する
y = Weights*x_data + biases
# 平均二乗誤差を最小にする。
loss = tf.reduce_mean(tf.square(y-y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)
# 開始する前に、変数を初期化する。まずこれを実行する
init = tf.global_variables_initializer()
# 起動する
sess = tf.Session()
sess.run(init) # 重要!!
for step in range(201):
sess.run(train)
if step % 20 == 0:
print(step, sess.run(Weights), sess.run(biases), sess.run(loss))
ーーーーーーーーーーーーーーーーーー
実行:
(0, array([ 1.22109318], dtype=float32), array([-0.40187132], dtype=float32), 0.12772495)
(20, array([ 0.39888635], dtype=float32), array([ 0.14364254], dtype=float32), 0.0074979686)
(40, array([ 0.17645188], dtype=float32), array([ 0.26000547], dtype=float32), 0.00049057766)
(60, array([ 0.1195556], dtype=float32), array([ 0.28976983], dtype=float32), 3.2097669e-05)
(80, array([ 0.1050021], dtype=float32), array([ 0.29738325], dtype=float32), 2.1000799e-06)
(100, array([ 0.10127948], dtype=float32), array([ 0.29933068], dtype=float32), 1.3740251e-07)
(120, array([ 0.10032728], dtype=float32), array([ 0.2998288], dtype=float32), 8.9902104e-09)
(140, array([ 0.10008371], dtype=float32), array([ 0.29995623], dtype=float32), 5.8807736e-10)
(160, array([ 0.10002143], dtype=float32), array([ 0.29998881], dtype=float32), 3.8534703e-11)
(180, array([ 0.10000548], dtype=float32), array([ 0.29999715], dtype=float32), 2.5172486e-12)
(200, array([ 0.10000139], dtype=float32), array([ 0.29999927], dtype=float32), 1.6451728e-13)
結果:
Weights=0.10000139(約0.1)
biases=0.29999927(約0.3)
loss=1.6451728e-13(約0)
tensorflowはy = x*0.1 + 0.3をわかった!