利用tensorflow的梯度下降法计算y=wx+b的w和b变量

import tensorflow as tf
import numpy as np

# 1. 创造数据
# 用 NumPy 随机生成 shape为[2,100] 的数据,全是0-1
x_data = np.float32(np.random.rand(2, 100))
# 用np.dot [0.100, 0.200](shape[1,2]) * x_data(shape[2,100]) ,得到shape为 [1,100] 数据再加0.3
y_data = np.dot([0.100, 0.200], x_data) + 0.300

# 2. 构造一个线性模型
# tf创建一个变量b,shape为1的0
b = tf.Variable(tf.zeros([1]))
# tf创建一个变量W,随机产生数据,shape为[1,2],取值在 -0.1 到 1.0,目前都是定义,未开始执行
W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0))
# tf的矩阵乘法,利用 相当于 X * x_data + b
y = tf.matmul(W, x_data) + b

# 3. 最小化方差
# tf计算y和y_data距离的方差
loss = tf.reduce_mean(tf.square(y - y_data))
# tf设置梯度下降的优化步数,学习率
optimizer = tf.train.GradientDescentOptimizer(0.5)
# tf利用梯度下降优化参数loss,并且更新loss里面的变量值
train = optimizer.minimize(loss)

# 初始化变量
init = tf.global_variables_initializer()

# 4. 启动tf神经元图 (graph),固定写法
sess = tf.Session()
# 执行初始化操作
sess.run(init)

# 5. 拟合平面
# 循环201次,执行loss和train
for step in range(0, 201):
    l, _ = sess.run([loss, train])
    print(l)
# 循环后,执行W和b
w_result, b_result = sess.run([W, b])
# 打印结果
print(w_result, b_result)

# 关闭
sess.close()

最终得到的w_result, b_result 为
w_result = [[0.10000058 0.20000087]]
b_result = [0.29999927]
与真实参数 [0.1,0.2],0.3 已经很接近

你可能感兴趣的:(利用tensorflow的梯度下降法计算y=wx+b的w和b变量)