Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 869|回复: 0

Tensorflow之单变量线性回归问题的解决方法

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-7-1 17:24:07 | 显示全部楼层 |阅读模式

    跟着网易云课堂上面的免费公开课深度学习应用开发Tensorflow实践学习,学到线性回归这里感觉有很多需要总结,梳理记录下阶段性学习内容。

    题目:通过生成人工数据集合,基于TensorFlow实现y=2*x+1线性回归

    使用Tensorflow进行算法设计与训练的核心步骤

    (1)准备数据

    (2)构建模型

    (3)训练模型

    (4)进行预测

    #线性回归问题
    
    #******************一、准备数据:**********************
    
    #生成人工数据集
    
    # 在Jupter中,使用matplotlib显示图像需要设置为inline模式,否则不会显示图像
    %matplotlib inline
     
    import matplotlib.pyplot as plt #载入matplotlib,用于绘图
    import numpy as np #载入numpy,numpy是Python进行科学计算时的基础模块
    import tensorflow as tf #载入Tensorflow
     
    #设置随机种子。训练之后结果随机,随机种子起到固定初始值的作用,为了训练之后得到一样的结果
    np.random.seed(5)
    #直接采用np生成等差数列的方法,生成100个点,每个点的取值在-1~1之间
    x_data = np.linspace(-1,1,100)
    
    # y = 2x +1 + 噪声,其中,噪声的维度与x_data一致
    y_data = 2 * x_data + 1.0 + np.random.randn(*x_data.shape) * 0.4
    
    #***********************二、构建线性模型*************************
    
    #定义训练数据的占位符,x是特征,y是标签值
    x = tf.placeholder("float",name= "x")
    y = tf.placeholder("float",name = "y")
    
    #定义模型函数
    def model(x,w,b):
        return tf.multiply(x,w) + b
    
    #定义模型结构
    #Tensorflow变量的声明函数是tf.Variable。tf.Variable的作用是保存和更新函数,变量的初始值可以是随机数、常数,或是通过其他变量的初始值计算得到
    #构建线性函数的斜率,变量w
    w = tf.Variable(1.0,name = "w0")
    #构建线性函数的截距,变量b
    b = tf.Variable(0.0,name = "b0")
    
    #pred是预测值,前向计算
    pred = model(x,w,b)
    
    #************************三、训练模型*******************************
    #设置训练参数
    #迭代次数(训练轮数)
    train_epochs = 10
    
    #学习率
    learning_rate = 0.05
    
    #定义优化器、最小损失函数
    
    #定义损失函数,损失函数用于描述预测值与真实值之间的差别,从而指导模型收敛方向。常见损失函数:均方差、交叉熵
    #采用均方差作为损失函数
    loss_function = tf.reduce_mean(tf.square(y-pred))
    
    #定义优化器
    #定义优化器Optimizer,初始化一个GradientDescentOptimizer(梯度下降优化器)
    #设置学习率和优化目标:最小化损失
    optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss_function)
    
    #创建会话
    #声明会话
    sess = tf.Session()
    #变量初始化
    #在真正执行计算前,需要将所有变量初始化。通过tf.global_variables_initializer函数可实现对所有变量的初始化
    init = tf.global_variables_initializer()
    sess.run(init)
    
    #迭代训练
    #模型训练阶段,设置迭代轮次,每次通过将样本逐个输入模型,进行梯度下降优化操作。每轮迭代后,绘制出模型曲线
    #开始训练,轮次为epoch,采用SGD随机梯度下降优化方法
    for epoch in range(train_epochs):
        for xs,ys in zip(x_data,y_data):
            _,loss = sess.run([optimizer,loss_function],feed_dict={x:xs,y:ys})
        b0temp = b.eval(session=sess)
        w0temp = w.eval(session=sess)
        plt.plot(x_data,w0temp * x_data + b0temp)  #画图
        
    #结果查看。当训练完成后,打印查看参数。数据每次运行都可能会有所不同
    print("w:",sess.run(w))     #w的值应该在2附近
    print("b:",sess.run(b))     #b的值应该在1附近
    
    #结果可视化
    plt.scatter(x_data,y_data,label='Original data')
    plt.plot(x_data,x_data*sess.run(w) + sess.run(b),label='Fitted line',color='r',linewidth=3)
    plt.legend(loc=2) #通过参数loc指定图例位置
    
    #*********************四、利用学习到的模型进行预测*******************
    
    x_test = 3.21
    
    predict = sess.run(pred,feed_dict={x:x_test})
    print("预测值: %f"%predict)
    
    target = 2 * x_test + 1.0
    print("目标值: %f"%target)
    

      题目二:通过生成人工数据集合,基于TensorFlow实现y=3.1234*x+2.98线性回归

    # 在Jupter中,使用matplotlib显示图像需要设置为inline模式,否则不会显示图像
    %matplotlib inline
     
    import matplotlib.pyplot as plt #载入matplotlib
    import numpy as np #载入numpy
    import tensorflow as tf #载入Tensorflow
     
    #设置随机种子
    np.random.seed(5)
    #直接采用np生成等差数列的方法,生成100个点,每个点的取值在-1~1之间
    x_data = np.linspace(-1,1,100)
    # y = 3.1234x +2.98 + 噪声, 其中, 噪声的唯度与x_data一致
    y_data = 3.1234*x_data + 2.98 + 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
    w = tf.Variable(1.0,name="w")
    # 构建线性函数的截距,变量b
    b = tf.Variable(0.0, name="b0")
    #pred是预测值,前向计算
    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()
    sess.run(init)
     
    # 开始训练,轮数为 epoch,采用SGD随机梯度下降优化方法
    #zip为组装,x,y都为一维数组. zip 把x,y组装起来也为一维数组,每个单元为(x,y)
     
    for epoch in range(train_epochs):
        for xs,ys in zip(x_data, y_data):
            #优化器给了一个下划线,loss_function 给了loss
            _, loss=sess.run([optimizer,loss_function],feed_dict={x: xs, y:ys})
     
    plt.scatter(x_data,y_data,label='Original data')
    plt.plot(x_data,x_data*sess.run(w)+sess.run(b),\
            label='Fitted line',color='r',linewidth=3)
    plt.legend(loc=2)#通过参数loc指定图例位置
     
    print("w: ", sess.run(w)) #w的值应该在3.1234附近
    print("b: ",sess.run(b)) #b的值应该在2.98附近

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-24 00:19 , Processed in 0.074750 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表