美文网首页学习tensorflow编程
基于tensorflow的一元一次方程回归预测

基于tensorflow的一元一次方程回归预测

作者: 潇洒坤 | 来源:发表于2018-09-12 16:50 被阅读85次

    2018年9月12日笔记

    0.检测tensorflow环境

    安装tensorflow命令:pip install tensorflow
    下面一段代码能够成功运行,则说明安装tensorflow环境成功。

    import tensorflow as tf
    hello = tf.constant('hello world')
    session = tf.Session()
    session.run(hello)
    

    上面一段代码成功运行的结果如下图所示:


    image.png

    1.数据准备

    import numpy as np
    
    w = 0.1
    b = 0.3
    X = np.random.rand(100).astype('float32')
    y = X * w + b
    

    第1行代码导入numpy库,起别名np;
    第5行代码调用np.random.rand方法随机产生100个值处于(0,1)之间的数。
    np.random.rand官方文档链接:https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.rand.html
    第6行代码使用了ndarray对象的广播特性,将X中的每一个值乘以w,再加上b的结果赋值给变量y。

    2.搭建神经网络

    Weights = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
    biases = tf.Variable(tf.zeros([1]))
    predict_y = Weights * X + biases
    loss = tf.reduce_mean(tf.square(predict_y - y))
    optimizer = tf.train.GradientDescentOptimizer(0.5)
    train = optimizer.minimize(loss)
    

    第1、2行代码调用tf.Variable方法实例化tensorflow中的变量对象,tf.Variable方法中的参数为tensorflow中的Tensor对象;


    image.png
    image.png
    image.png

    第3行代码将变量与特征矩阵的计算结果赋值给变量predict_y,数据类型如下图所示:


    image.png
    第4行代码定义损失函数,等同于回归预测中的MSE,中文叫做均方误差,数据类型如下图所示:
    image.png
    第5行代码调用tf.train库中的GradientDescentOptimizer方法实例化优化器对象,数据类型如下图所示:
    image.png

    第6行代码调用优化器的minimize方法定义训练方式,参数为损失函数。方法的返回结果赋值给变量train,数据类型如下图所示:


    image.png

    3.变量初始化

    init = tf.global_variables_initializer()
    session = tf.Session()
    session.run(init)
    

    对于神经网络模型,重要是其中的W、b这两个参数。
    开始神经网络模型训练之前,这两个变量需要初始化。
    第1行代码调用tf.global_variables_initializer实例化tensorflow中的Operation对象。


    image.png

    第2行代码调用tf.Session方法实例化会话对象;
    第3行代码调用tf.Session对象的run方法做变量初始化。

    4.模型训练

    模型训练200次,每运行1次代码session.run(train)则模型训练1次。
    在训练次数为20的整数倍时,打印训练步数、训练后更新的Weights和biases值。

    for step in range(201):
        session.run(train)
        if step % 20 == 0:
            print(step, session.run(Weights), session.run(biases))
    

    上面一段代码的运行结果如下:


    image.png

    5.完整代码

    下面代码与前文相比,改变了w和b的值。

    import tensorflow as tf
    import numpy as np
    
    w = 2
    b = 0.5
    X = np.random.rand(100).astype('float32')
    y = X * w + b
    
    Weights = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
    biases = tf.Variable(tf.zeros([1]))
    predict_y = Weights * X + biases
    loss = tf.reduce_mean(tf.square(predict_y - y))
    optimizer = tf.train.GradientDescentOptimizer(0.5)
    train = optimizer.minimize(loss)
    
    init = tf.global_variables_initializer()
    session = tf.Session()
    session.run(init)
    
    for step in range(201):
        session.run(train)
        if step % 20 == 0:
            print(step, session.run(Weights), session.run(biases))
    

    上面一段代码的运行结果如下:

    0 [1.2842455] [1.2999418]
    20 [1.7820456] [0.6222662]
    40 [1.9463692] [0.5300854]
    60 [1.9868033] [0.50740296]
    80 [1.9967527] [0.5018216]
    100 [1.9992009] [0.5004483]
    120 [1.9998035] [0.5001102]
    140 [1.9999516] [0.5000271]
    160 [1.9999882] [0.5000066]
    180 [1.999997] [0.50000167]
    200 [1.9999994] [0.50000036]

    6.总结

    1.这是本文作者写的第1篇关于tensorflow的文章,加深了对tensorflow框架的理解;
    2.一元一次方程回归预测是简单的回归问题,主要用于熟悉tensorflow的流程。

    相关文章

      网友评论

        本文标题:基于tensorflow的一元一次方程回归预测

        本文链接:https://www.haomeiwen.com/subject/bzivgftx.html