Tensorflow学习笔记:实现简单的线性回归

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/WilliamCode/article/details/85240544

#线性回归是什么
    y = w1x1 + w2x2 + w3x3 + w4x4 + ... + w_nx_n + bias
    算法:线性回归
    策略:均方误差
    优化:梯度下降算法(需要设置学习率)

#训练过程
1、准备好特征和目标值,例子用广告投入与销量之间的关系    
    这里准备特征值100个[100,1]
    用y = x*0.7 + 0.8a计算出目标值[100,1]
2、建立模型(画图)
    注:给n个特征,那么需要设置n个权重,一个偏置
    这里准备一个权重w,一个偏执b(随机初始化)    
    
3、求预测结果、计算损失
    y_predict = x*w + b
    损失函数loss = ((y1-y1')^2 + ... + (y100-y100')^2)/100

4、梯度下降减小损失,优化参数,指定学习率        

#实现线性回归需要的API
    矩阵相乘tf.matmul(x,w)
    平方tf.square()
    均值tf.reduce_mean()
    梯度下降tf.train.GradientDescentOptimizer(learning_rate,method = minmum(loss),返回op

#模型参数必须用Varialbe定义


#梯度爆炸问题
    1、重新设计网络
    2、调整学习率
    3、使用梯度截断
    4、使用激活函数

#线性回归问题代码:
def myregression():
    """
    实现线性回归预测
    return: None
    """
    #1、准备好特征和目标值
    x = tf.random_normal([100,1],mean = 10,stddev = 2,name = 'input_data_x')
    y_true = tf.matmul(x,[[0.7]]) + 0.8

    #2、建立回归模型,1个特征,1个权重
    w = tf.Variable(tf.random_normal([1,1],mean = 0.0,stddev = 1.0),name = 'weight')
    b = tf.Variable(0.0,name='bias')
    y_predict = tf.matmul(x,w) + b


    
    loss = tf.reduce_mean(tf.square(y_true-y_predict))

    #4、梯度下降算法优化损失
    train_op = tf.train.GradientDescentOptimizer(0.006).minimize(loss)

    #定义变量初始化op    
    init_op = tf.global_variables_initializer()

    tf.summary.histogram("input_x",x)
    merge_op = tf.summary.merge_all()
    
    #通过会话运行训练过程
    with tf.Session() as sess:
        #初始化变量
        sess.run(init_op)

        for i in range(30000):
            sess.run(train_op)
            print("after %d times of training w&b is %f %f"%(i,w.eval(),b.eval()))

import tensorflow as tf
if __name__ == "__main__":
    myregression()

#经验:
    如果发生了梯度爆炸,即参数结果出现了nan,则是学习率太大,这时需要调整学习率;同时,数据的质量对结果的影响也很大

猜你喜欢

转载自blog.csdn.net/WilliamCode/article/details/85240544