# -*- coding: utf-8 -*-
import tensorflow as tf
import numpy as np
# 使用 NumPy 生成假數據(phony data), 總共 100 個點.
x_data = np.float32(np.random.rand(2,100)) # 隨機輸入,2行100列
y_data = np.dot([0.100, 0.200], x_data) + 0.300 # 返回的是兩個數組的點積,如果是二維數組(矩陣)之間的運算,則得到的是矩陣積
# 構造一個線性模型 構建圖
b = tf.Variable(tf.zeros([1])) # b初始化爲0
W = tf.Variable(tf.random_uniform([1, 2], -2.0, 2.0)) # b和W是要學習的參數
y = tf.matmul(W, x_data) + b # 創建一個矩陣乘法 matmul op
# 最小化方差
loss = tf.reduce_mean(tf.square(y - y_data)) # y爲估計值,y_data爲真實值
optimizer = tf.train.GradientDescentOptimizer(0.5) # 學習率爲0.5
train = optimizer.minimize(loss) # 訓練
# 初始化變量
init = tf.initialize_all_variables()
# 啓動圖 (graph)
sess = tf.Session() # 創建一個會話,當上下文管理器退出時會話關閉和資源釋放自動完成
#sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
sess.run(init) # 初始化
# 擬合平面
for step in range(0, 201): # step爲循環次數
sess.run(train) # 訓練
if step % 20 == 0:
print (step, sess.run(W), sess.run(b)) # Variable要在sess.run()才能輸出