TensorFlow实践:线性回归

说明

通过生成人工数据集合,基于TensorFlow实现线性回归

产生数据

利用随机数在直线y=2.321*x+1.564的基础上,加上一定的噪音,产生在(-1,1)范围的数据。

np.random.seed(5)
x_data = np.linspace(-1,1,100)
#2.321*x+1.564
W0 = 2.321
B0 = 1.564
y_data = W0 * x_data + B0 + np.random.randn(*x_data.shape)*0.4

生成数据

构建模型

x = tf.placeholder("float",name = "x")
y = tf.placeholder("float",name = "y")

def model(x,w,b):
    return tf.multiply(x,w)+b

w = tf.Variable(1.0,name = "w0")
b = tf.Variable(0.0,name = "b0")
pred = model(x,w,b)

train_epochs = 10
learning_rate = 0.05

loss_function = tf.reduce_mean(tf.square(y-pred))
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss_function)

    x,y是两个占位符,用于保存训练过程中的数据,w,b是两个变量,训练就是不断地改变这两个值,以使模型达到最好。
    train_epochs和learning_rate是两个超参数,分别表示训练的总次数,这两个参数可以根据训练的效果来改变。
    loss_function是损失函数,程序的目标就是让这个损失函数的值最小,这里用的是模型的输出值与输入的数据y之间的差的平方的平均数来表示,optimizer是优化器,这里采用的是梯度下降算法。

训练模型

sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)
for epoch in range(train_epochs):
    for xi,yi in zip(x_data,y_data):
        _,loss = sess.run([optimizer,loss_function],feed_dict={x:xi,y:yi})

训练模型时,先启动会话,然后初始化变量,之后就是正式的去训练模型,即在每个轮次中,通过feed_dict函数,将数据喂给模型,模型就可以根据这些数据来训练。

完整代码

import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf

np.random.seed(5)
x_data = np.linspace(-1,1,100)
#2.321*x+1.564
W0 = 2.321
B0 = 1.564
y_data = W0 * x_data + B0 + np.random.randn(*x_data.shape)*0.4
#图像显示
plt.figure("Image1")
plt.rcParams['figure.figsize'] = (10, 6)
plt.scatter(x_data,y_data)
plt.plot(x_data,W0* x_data + B0,'red')
#构建模型
x = tf.placeholder("float",name = "x")
y = tf.placeholder("float",name = "y")

def model(x,w,b):
    return tf.multiply(x,w)+b

w = tf.Variable(1.0,name = "w0")
b = tf.Variable(0.0,name = "b0")
pred = model(x,w,b)

train_epochs = 10
learning_rate = 0.05

loss_function = tf.reduce_mean(tf.square(y-pred))
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss_function)

sess = tf.Session()
init = tf.global_variables_initializer()

plt.figure("Image2")
sess.run(init)
for epoch in range(train_epochs):
    for xi,yi in zip(x_data,y_data):
        _,loss = sess.run([optimizer,loss_function],feed_dict={x:xi,y:yi})
    w_temp = w.eval(session = sess)    
    b_temp = b.eval(session = sess)
    plt.plot(x_data,w_temp*x_data + b_temp)

print("原直线:","w:",W0,"    b:",B0)
print("训练结果:","w:",sess.run(w),"    b:",sess.run(b))

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值