TensorFlow实现一元线性回归模型搭建、训练、求参

Python:3.9

编译环境:vscode

TensorFlow:2.8.0

问题描述:设给定一批由y=0.1*x+0.3生成的数据集(x,y),建立线性回归模型h=w*x+b,预测出w=0.1和b=0.3。

其实网上或书本上都有,但是鉴于其上代码运行会出现各种错误,尤其是关于TensorFlow版本的问题最多,多的不说,先奉上代码及代码解释,便于初学者学习、理解。

#加入忽略,电脑使用cpu模式,加入忽略代码,可以防止报错产生

import os

from pickletools import optimize

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

## 生成拟合数据集 ````````````````    

# 首先导入3个库

from re import X

import numpy as np

import tensorflow.compat.v1 as tf           #TensorFlow版本原因

tf.disable_v2_behavior()

import matplotlib.pyplot as plt

# 随机产生100个数据点,随机概率符合高斯分布(正态分布)

num_points = 100

vectors_set = [ ]

for i in range(num_points):

    x1=np.random.normal(0.,0.55)

    y1=x1*0.1+0.3+np.random.normal(0.0,0.03)

    vectors_set.append([x1,y1])

# 定义特征向量x

x_data = [v[0] for v in vectors_set]

# 定义标签向量y

y_data = [v[1] for v in vectors_set]

plt.scatter(x_data,y_data,c='b')

plt.show()

## 构建线性回归模型数据流图``````````````

# 利用TensorFlow随机产生w和b,为了图形显示需要,分别定义名称myw和myb

w = tf.Variable(tf.random.uniform([1],-1.,1.),name='myw')   #新版的写法,写成tf.random_uniform()会报错,显示AttributeError类型错误

b = tf.Variable(tf.zeros([1]),name='myb')

# 根据随机产生的w和b,结合上面随机产生的特征向量x_data,经过计算得出预估值

y = w * x_data + b

# 以预估值y和实际值y_data的均方差作为损失

loss = tf.reduce_mean(tf.square(y-y_data,name='mysquare'),name='myloss')

# 采用梯度下降法来优化参数

tf.compat.v1.disable_eager_execution()

train = tf.train.GradientDescentOptimizer(0.5).minimize(loss)   #新版TensorFlow的写法

## 在Session中运行已构建的数据流图``````````

# global_variables_initializer初始化Variable等变量

sess = tf.Session()

int = tf.global_variables_initializer()

sess.run(int)

print('w=',sess.run(w),'b=',sess.run(b),sess.run(loss))

# 迭代50次train

step = 1

for step in range(50):

    sess.run(train)

    step = step + 1

    print('steps=',step,'w=',sess.run(w),'b=',sess.run(b),'loss=',sess.run(loss))

plt.scatter(x_data,y_data,c='b')

plt.plot(x_data,sess.run(w)*x_data+sess.run(b))

plt.show()

一般来说,给的数据集越多,训练次数越多,拟合的效果就会更好,也会得到更理想的结果

作者自己也是尝试了好多遍,中途会出现很多错误,也特别感谢CSDN这个平台,让我一步步解决问题,最终也功夫不负有心人,成功了。

有什么写的不对的地方,大家也多提意见,互相学习。

最后,尝试不易,希望有帮助到你的,点个赞鼓励一下爬虫小子

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值