(二)使用TensorFlow对一元一次线性方程进行预测

本文介绍如何使用TensorFlow对一元一次线性方程进行预测。先声明变量w和b,以已知数据第一个值作为待预测自变量,计算预测结果与真实值的误差,采用梯度下降法减小误差。通过不断输入数据优化调整w和b,最后输出调整后的值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一章我们讲了TensorFlow中的一些针对变量、矩阵的基本操作,如果忘了可以再点击链接看一下---->查看上一章

先来说明如何使用TensorFlow对一元一次线性方程进行预测:

假设我们有一堆模拟数据,数据是(x,y)类型的,比如(3,7)(-0.1,0.8)类似数据

  1. 关于这些数据,我们通过分析,这些数据的特征值只有一个,符合一元一次线性分布y=wx+b,w为权重,b为偏秩。我们要做的就是通过已知的数据将w和b学习到,然后再传入x,对y进行预测
  2. 我们先声明w和b两个变量,既然都不知道w和b的值,那就直接将w和b都声明为0吧
    w = tf.Variable(0.)
    b = tf.Variable(0.)

    按道理来说我们还需要一个placeholder来表示待预测的自变量,但是为了测试方便,我们就直接将已知数据的第一个值作为待预测的自变量。换句话来说,我们通过已知数据来学习w和b,我传入一个3,正确的值是7,那么我通过w*3+b得到预测的值,这时候就可以得到预测结果与真实值的误差。

    # y_data是真实值 y_pre是预测值
    loss = tf.reduce_mean(tf.square(y_data - y_pre))

     

  3. 我们获取到了误差,那是不是应该以减小误差为目标,这里减小误差的方法我们用到了梯度下降法,参考什么是梯度下降?
  4. 通过传入足够的数据不断地调整w和b,来减小预测的误差

假设数据符合的一元一次方程为y=2x+1,w和b初始化为0,通过不断输入的数据对w和b进行优化调整,最后对w和b调整后的值进行了输出,下面贴出完整的代码

# -*- coding: UTF-8 -*-
"""
一元一次函数中weights和biases的优化
"""
import tensorflow as tf
import numpy as np

# 初始化测试数据
x_data = np.random.rand(100)
y_data = x_data * 2 + 1

w = tf.Variable(0.)
b = tf.Variable(0.)

# 预测值
y_pre = w * x_data + b
# 求出loss,差值平方的均值
loss = tf.reduce_mean(tf.square(y_data - y_pre))
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.5)
# 使用优化器对误差进行优化
train = optimizer.minimize(loss)
# 变量的初始化
init = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    for step in range(101):
        sess.run(train)
        if step % 20 == 0:
            print(sess.run([w, b]))

下面是运行结果,可以看到在80次左右就很接近真实的w和b的值了

[1.4253851, 2.1582198]
[1.7544544, 1.1520193]
[1.9354309, 1.0399753]
[1.9830208, 1.010512]
[1.9955351, 1.0027642]
[1.998826, 1.0007269]

 

### 如何使用神经网络和深度学习实现一元线性回归用于广告预测 #### 背景介绍 在一元线性回归问题中,目标是找到输入变量 \(X\) 和输出变量 \(Y\) 的最佳线性关系。对于广告预测场景,假设已知广告投入金额(\(X\)),希望预测其带来的收益(\(Y\))。可以利用神经网络和深度学习框架来构建并训练模型。 --- #### 使用神经网络解决一元线性回归的核心概念 神经网络可以通过调整权重和偏差参数拟合任意复杂的函数形式。尽管一元线性回归是一个简单的线性问题,但它仍然是理解更复杂模型的基础。以下是实现的关键点: 1. **模型结构设计** 构建一个单层神经网络即可满足需求,其中仅包含一个输入节点、一个隐藏层以及一个输出节点。这种简单的设计能够模拟标准的一元线性方程 \(y = wx + b\)[^2]。 2. **损失函数的选择** 为了衡量预测值与真实值之间的差异,通常选用均方误差 (Mean Squared Error, MSE) 作为损失函数。它表示所有样本上预测值与实际值之间差距平方的平均数[^5]。 3. **优化算法的应用** 可以采用梯度下降法及其变体(如 Adam Optimizer)更新模型参数直至收敛至局部最优解或者全局最优点附近[^3]。 4. **编程工具推荐** 利用 PyTorch 或 TensorFlow 这样的现代深度学习库能极大简化开发流程,并提供高效的自动微分机制支持反向传播操作。 --- #### 实现步骤详解 下面展示一段基于 PyTorch 的代码片段,演示如何创建这样一个用于广告预算效果评估的任务实例: ```python import torch from torch import nn, optim # 定义超参 learning_rate = 0.01 epochs = 1000 # 数据准备(假设有如下数据) X_train = torch.tensor([[i] for i in range(1, 11)], dtype=torch.float32) # 广告费用 Y_train = torch.tensor([[2*i+1] for i in X_train], dtype=torch.float32) # 收益情况 class LinearRegressionModel(nn.Module): def __init__(self): super().__init__() self.linear_layer = nn.Linear(in_features=1, out_features=1) def forward(self, x): return self.linear_layer(x) model = LinearRegressionModel() criterion = nn.MSELoss() # 设置MSE Loss Function optimizer = optim.SGD(model.parameters(), lr=learning_rate) for epoch in range(epochs): model.train() predictions = model(X_train) loss = criterion(predictions, Y_train) optimizer.zero_grad() loss.backward() optimizer.step() if (epoch+1)%100==0: print(f'Epoch [{epoch+1}/{epochs}], Loss: {loss.item():.4f}') print("最终模型参数:") print('w:', list(model.parameters())[0].item()) print('b:', list(model.parameters())[1].item()) ``` 上述脚本展示了完整的训练循环逻辑,包括初始化模型架构、指定代价函数及调用随机梯度下降方法完成每轮迭代后的权值修正动作。 --- #### 结果解释 随着训练进程推进,可以看到损失逐渐减小的趋势;而最后打印出来的 `w` 和 `b` 即对应于所寻找的最佳直线斜率与截距项估计值。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值