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这个平台,让我一步步解决问题,最终也功夫不负有心人,成功了。
有什么写的不对的地方,大家也多提意见,互相学习。
最后,尝试不易,希望有帮助到你的,点个赞鼓励一下爬虫小子