前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TensorFlow实战--Chapter04单变量线性回归

TensorFlow实战--Chapter04单变量线性回归

作者头像
北山啦
发布2022-11-27 13:46:02
2910
发布2022-11-27 13:46:02
举报
文章被收录于专栏:北山啦的博客

TensorFlow实战–Chapter04单变量线性回归

使用tensorflow实现单变量回归模型

文章目录

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

  1. 准备数据
  2. 构建模型
  3. 训练模型
  4. 进行预测

上述步骤是我们使用TensorFlow进行算法设计与训练的核心步骤,贯穿于具体实践中。

监督式机器学习的基本术语

标签和特征

训练

损失

定义损失函数

模型训练与降低损失

样本和模型

线性回归问题TensorFlow实战

人工数据生成

代码语言:javascript
复制
import warnings
warnings.filterwarnings("ignore")
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
代码语言:javascript
复制
np.random.seed(5)

使用numpy生成等差数列的方法,生成100个点,每个点的取值在[-1,1]之间

y = 2x + 1 + 噪声,其中,噪声的维度与x_data一致

np.random.randn(x_data.shape)实参的前面加上和**,就意味着拆包,单个*号表示将元组拆成一个个单独的实参

代码语言:javascript
复制
x_data = np.linspace(-1, 1, 100)
y_data = 2 * x_data + 1.0 + np.random.randn(*x_data.shape) * 0.4

利用matplotlib绘图

代码语言:javascript
复制
plt.scatter(x_data, y_data)
plt.show()
代码语言:javascript
复制
plt.plot(x_data, 2 * x_data + 1.0, color="red", linewidth=3)
plt.show()

定义模型

定义训练数据的占位符,x是特征值,y是标签值

代码语言:javascript
复制
x = tf.placeholder("float", name="x")
y = tf.placeholder("float", name="y")

定义模型函数

代码语言:javascript
复制
def model(x, w, b):
    return tf.multiply(x, w) + b

创建变量

  • TensorFlow变量的声明函数是tf.Variable
  • tf,Variable的作用是保存和更新参数
  • 变量的初始值可以是随机数、常数,或是通过其他变量的初始值计算得到
代码语言:javascript
复制
# 构建线性函数的斜率,变量2
w = tf.Variable(1.0, name="w0")
# 构建线性函数的截距,变量b
b = tf.Variable(0.0, name="b0")
# pred是预测值,前向计算
pred = model(x, w, b)

模型训练

  1. 设置训练参数
代码语言:javascript
复制
train_epochs = 10  # 迭代次数
learning_rate = 0.05  # 学习率
  1. 损失函数
  • 损失函数用于描述预测值和真实值之间的误差,从而指导模型的收敛方向
  • 常见的损失函数:
    1. 均方差(Mean Square Error)
    2. 交叉熵(cross-entropy)
代码语言:javascript
复制
loss_function = tf.reduce_mean(tf.square(y - pred))  # 采用均方差
  1. 定义优化器 优化器Optimizer,初始化一个GradientDescentOPtimizer 设置学习率和优化目标:最小化损失
代码语言:javascript
复制
# 梯度下降优化器
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(
    loss_function)

创建会话,变量初始化

  • 在真正进行计算之气,需将所有变量初始化
  • 通过==tf.global_variables_initializer()==函数可实现对所有变量的初始化
代码语言:javascript
复制
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)

迭代训练

模型训练阶段,设置迭代轮次,通过将样本逐个输入模型,进行梯度优化操作。每轮迭代后,绘制出模型曲线

代码语言:javascript
复制
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)

打印结果

代码语言:javascript
复制
print("w:",sess.run(w))
print("b:",sess.run(b))
代码语言:javascript
复制
w: 1.9822965
b: 1.0420128

可视化

代码语言:javascript
复制
plt.scatter(x_data,y_data,label="original data")
plt.plot(x_data,x_data*sess.run(w)+sess.run(b),label="fitter line",color="r",linewidth=3)
plt.legend(loc=2)
plt.show()

进行预测

代码语言:javascript
复制
x_test = 3.21
predict = sess.run(pred,feed_dict={x:x_test})
print(f"预测值:{predict}")
target = 3* x_test +1.0
print(f"目标值:{target}")
代码语言:javascript
复制
预测值:7.405184268951416
目标值:10.629999999999999

显示损失值

代码语言:javascript
复制
step = 0
loss_list = []
display_step = 10
for eopch 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
                           })
        loss_list.append(loss)
        step += 1
        if step % display_step == 0:
            print(f"Train Epoch:{eopch+1}", f"Step:{step}", f"loss={loss}")
    b0temp = b.eval(session=sess)
    w0temp = w.eval(session=sess)
    plt.plot(x_data,w0temp*x_data+b0temp)
代码语言:javascript
复制
Train Epoch:1 Step:10 loss=0.03621993958950043
Train Epoch:1 Step:20 loss=0.08414854109287262
Train Epoch:1 Step:30 loss=0.00047292912495322526
Train Epoch:1 Step:40 loss=0.32646191120147705
Train Epoch:1 Step:50 loss=0.027518080547451973
Train Epoch:1 Step:60 loss=0.01023304183036089
Train Epoch:1 Step:70 loss=0.12734712660312653
Train Epoch:1 Step:80 loss=0.0010273485677316785
Train Epoch:1 Step:90 loss=0.10288805514574051
Train Epoch:1 Step:100 loss=0.048337195068597794
Train Epoch:2 Step:110 loss=0.03621993958950043
Train Epoch:2 Step:120 loss=0.08414854109287262
Train Epoch:2 Step:130 loss=0.00047292912495322526
Train Epoch:2 Step:140 loss=0.32646191120147705
Train Epoch:2 Step:150 loss=0.027518080547451973
Train Epoch:2 Step:160 loss=0.01023304183036089
Train Epoch:2 Step:170 loss=0.12734712660312653
Train Epoch:2 Step:180 loss=0.0010273485677316785
Train Epoch:2 Step:190 loss=0.10288805514574051
Train Epoch:2 Step:200 loss=0.048337195068597794
Train Epoch:3 Step:210 loss=0.03621993958950043
Train Epoch:3 Step:220 loss=0.08414854109287262
Train Epoch:3 Step:230 loss=0.00047292912495322526
Train Epoch:3 Step:240 loss=0.32646191120147705
Train Epoch:3 Step:250 loss=0.027518080547451973
Train Epoch:3 Step:260 loss=0.01023304183036089
Train Epoch:3 Step:270 loss=0.12734712660312653
Train Epoch:3 Step:280 loss=0.0010273485677316785
Train Epoch:3 Step:290 loss=0.10288805514574051
Train Epoch:3 Step:300 loss=0.048337195068597794
Train Epoch:4 Step:310 loss=0.03621993958950043
Train Epoch:4 Step:320 loss=0.08414854109287262
Train Epoch:4 Step:330 loss=0.00047292912495322526
Train Epoch:4 Step:340 loss=0.32646191120147705
Train Epoch:4 Step:350 loss=0.027518080547451973
Train Epoch:4 Step:360 loss=0.01023304183036089
Train Epoch:4 Step:370 loss=0.12734712660312653
Train Epoch:4 Step:380 loss=0.0010273485677316785
Train Epoch:4 Step:390 loss=0.10288805514574051
Train Epoch:4 Step:400 loss=0.048337195068597794
Train Epoch:5 Step:410 loss=0.03621993958950043
Train Epoch:5 Step:420 loss=0.08414854109287262
Train Epoch:5 Step:430 loss=0.00047292912495322526
Train Epoch:5 Step:440 loss=0.32646191120147705
Train Epoch:5 Step:450 loss=0.027518080547451973
Train Epoch:5 Step:460 loss=0.01023304183036089
Train Epoch:5 Step:470 loss=0.12734712660312653
Train Epoch:5 Step:480 loss=0.0010273485677316785
Train Epoch:5 Step:490 loss=0.10288805514574051
Train Epoch:5 Step:500 loss=0.048337195068597794
Train Epoch:6 Step:510 loss=0.03621993958950043
Train Epoch:6 Step:520 loss=0.08414854109287262
Train Epoch:6 Step:530 loss=0.00047292912495322526
Train Epoch:6 Step:540 loss=0.32646191120147705
Train Epoch:6 Step:550 loss=0.027518080547451973
Train Epoch:6 Step:560 loss=0.01023304183036089
Train Epoch:6 Step:570 loss=0.12734712660312653
Train Epoch:6 Step:580 loss=0.0010273485677316785
Train Epoch:6 Step:590 loss=0.10288805514574051
Train Epoch:6 Step:600 loss=0.048337195068597794
Train Epoch:7 Step:610 loss=0.03621993958950043
Train Epoch:7 Step:620 loss=0.08414854109287262
Train Epoch:7 Step:630 loss=0.00047292912495322526
Train Epoch:7 Step:640 loss=0.32646191120147705
Train Epoch:7 Step:650 loss=0.027518080547451973
Train Epoch:7 Step:660 loss=0.01023304183036089
Train Epoch:7 Step:670 loss=0.12734712660312653
Train Epoch:7 Step:680 loss=0.0010273485677316785
Train Epoch:7 Step:690 loss=0.10288805514574051
Train Epoch:7 Step:700 loss=0.048337195068597794
Train Epoch:8 Step:710 loss=0.03621993958950043
Train Epoch:8 Step:720 loss=0.08414854109287262
Train Epoch:8 Step:730 loss=0.00047292912495322526
Train Epoch:8 Step:740 loss=0.32646191120147705
Train Epoch:8 Step:750 loss=0.027518080547451973
Train Epoch:8 Step:760 loss=0.01023304183036089
Train Epoch:8 Step:770 loss=0.12734712660312653
Train Epoch:8 Step:780 loss=0.0010273485677316785
Train Epoch:8 Step:790 loss=0.10288805514574051
Train Epoch:8 Step:800 loss=0.048337195068597794
Train Epoch:9 Step:810 loss=0.03621993958950043
Train Epoch:9 Step:820 loss=0.08414854109287262
Train Epoch:9 Step:830 loss=0.00047292912495322526
Train Epoch:9 Step:840 loss=0.32646191120147705
Train Epoch:9 Step:850 loss=0.027518080547451973
Train Epoch:9 Step:860 loss=0.01023304183036089
Train Epoch:9 Step:870 loss=0.12734712660312653
Train Epoch:9 Step:880 loss=0.0010273485677316785
Train Epoch:9 Step:890 loss=0.10288805514574051
Train Epoch:9 Step:900 loss=0.048337195068597794
Train Epoch:10 Step:910 loss=0.03621993958950043
Train Epoch:10 Step:920 loss=0.08414854109287262
Train Epoch:10 Step:930 loss=0.00047292912495322526
Train Epoch:10 Step:940 loss=0.32646191120147705
Train Epoch:10 Step:950 loss=0.027518080547451973
Train Epoch:10 Step:960 loss=0.01023304183036089
Train Epoch:10 Step:970 loss=0.12734712660312653
Train Epoch:10 Step:980 loss=0.0010273485677316785
Train Epoch:10 Step:990 loss=0.10288805514574051
Train Epoch:10 Step:1000 loss=0.048337195068597794

图形现显示话损失值

代码语言:javascript
复制
plt.plot(loss_list)
代码语言:javascript
复制
plt.plot(loss_list,"r+")

到这里就结束了,如果对你有帮助,欢迎点赞关注评论,你的点赞对我很重要

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-03-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • TensorFlow实战–Chapter04单变量线性回归
    • 文章目录
    • 监督式机器学习的基本术语
      • 标签和特征
        • 训练
          • 损失
            • 定义损失函数
              • 模型训练与降低损失
                • 样本和模型
                • 线性回归问题TensorFlow实战
                  • 人工数据生成
                    • 利用matplotlib绘图
                      • 定义模型
                        • 模型训练
                          • 创建会话,变量初始化
                            • 迭代训练
                              • 打印结果
                                • 可视化
                                  • 进行预测
                                    • 显示损失值
                                      • 图形现显示话损失值
                                      领券
                                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档