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

上一章我们讲了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]

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值