TensorFlow之线性回归(一)

线性回归属于有监督学习,此类问题,根据带标注的信息去训练一个推断模型。该模型覆盖一个数据集,并且对不存在的新样本进行预测。该模型确定以后,构成模型的运算也就固定。在各运算过程有一些参与运算的数值,在训练过程不断更新,使模型能够学习,并对其输出进行调整。

虽然推断不同模型在运算数量和组合方式有很大的不同,但是归纳起来,主要是如下的步骤:
1、初始化模型参数
2、输入训练数据
3、在训练数据上执行推断模型
4、计算损失函数
5、调整模型参数,返回第二步

现在我们同过线性回归,了解TensorFlow的训练过程

线性回归

线性回归是用来度量变量间关系的统计技术。有意思的是该算法的实现并不复杂,但可以适用于很多情形。正是因为这些原因,我非常乐意以线性回归作为开始学习TensorFlow的开始。

请记住,不管在两个变量(简单回归)或多个变量(多元回归)情形下,线性回归都是对一个依赖变量,多个独立变量xi,一个随机值b间的关系建模。

在本小节中,会创建一个简单的例子来说明TensorFlow如何假设我们的数据模型符合一个简单的线性回归y = W * x + b,为达到这个目的,首先通过简单的python代码在二维空间中生成一系列的点,然后通过TensorFlow寻找最佳拟合这些点的直线。

实现



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


def createdate(datanum,sigma):
    #创建datanum个随机点,数值为[0.1)之间
    x_data=np.random.rand(datanum)
    noise=np.random.normal(0,sigma,x_data.shape)
    y_data=x_data*12+4 + noise 

    return x_data,y_data

def train(x_data,y_data,epoch=10000):
    #构造一个线性模型
    #随机生成权值和偏置
    w=tf.Variable(tf.random_normal([1]))
    b=tf.Variable(tf.random_normal([1]))    
    y=w*train_x+b

    #二次代价函数
    loss=tf.reduce_mean(tf.square(y_data-y))
    #使用梯度下降法的优化器进行优化
    optimzer=tf.train.GradientDescentOptimizer(0.1).minimize(loss)

    init = tf.global_variables_initializer()
    with tf.Session() as sess:
        sess.run(init)
        for step in range(epoch):
            sess.run(optimzer)
            #if (step % 100 == 0):
            #    print(step,sess.run([w,b,loss]))

        return sess.run(w),sess.run(b),sess.run(y)    

if __name__ == "__main__":
    #创建一对训练模型和一对测试模型
    train_x,train_y  = createdate(100,0.2)
    #test_x,test_y = createdate(20,0.02)
    w,b,y = train(train_x,train_y,10000)        
    print ("weight",w) 
    print ("bias",b)    

    #画图
    plt.figure()
    #散点图
    plt.scatter(train_x,train_y)
    #绘制线,颜色为红色,宽度为5    
    plt.plot(train_x,y,'r-',lw=1)
    plt.show()

结果

这里写图片描述

猜你喜欢

转载自blog.csdn.net/mozf881/article/details/78939977