过程:
先用numpy建立100个数据点,再用梯度下滑工具来拟合,得到完美的回归线。
# _*_coding:utf-8_*_
import tensorflow as tf
import numpy as np # 用numpy建立100个数据点,y=x*0.1+0.3
x_data = np.random.rand(100).astype("float32")
y_data = x_data*0.1+0.3 # 建立权值变量W和偏移量变量b
W = tf.Variable(tf.random_uniform([1],-1.0,1.0))
b = tf.Variable(tf.zeros([1]))
y = W * x_data + b # 最小化均方差
loss = tf.reduce_mean(tf.square(y - y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5) #train里面有最优化函数
train = optimizer.minimize(loss) #gradient descent 作用的是代价函数 # 变量使用前要初始化
init = tf.initialize_all_variables() # 载入图(在一个session被建立并且run()函数被运行前,TensorFlow不会进行任何实质的计算)
sess = tf.Session() # 会话将图的 op 分发到如 CPU 或 GPU 之类的 设备 (Devices()) 上, 同时提供 执行 op 的方法
sess.run(init) # 调整线
for step in xrange(201):
sess.run(train)
if step % 20 == 0:
print (step, sess.run(W), sess.run(b))
运行结果:
(0, array([ 0.32897317], dtype=float32), array([ 0.2412499], dtype=float32))
(20, array([ 0.15775403], dtype=float32), array([ 0.26956022], dtype=float32))
(40, array([ 0.11639664], dtype=float32), array([ 0.29135802], dtype=float32))
(60, array([ 0.1046551], dtype=float32), array([ 0.29754651], dtype=float32))
(80, array([ 0.10132162], dtype=float32), array([ 0.29930344], dtype=float32))
(100, array([ 0.10037522], dtype=float32), array([ 0.29980224], dtype=float32))
(120, array([ 0.10010655], dtype=float32), array([ 0.29994386], dtype=float32))
(140, array([ 0.10003026], dtype=float32), array([ 0.29998407], dtype=float32))
(160, array([ 0.10000858], dtype=float32), array([ 0.29999548], dtype=float32))
(180, array([ 0.10000245], dtype=float32), array([ 0.29999873], dtype=float32))
符合:y=x*0.1+0.3