# -*- 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()才能输出