序言
结合tensorflow拟合函数y=kx+b模型训练最简单实例,一起入门机器学习
准备数据
首先随机生成散点图数据
# import tensorflow as tf
# 上面导包找不到placeholder模块时,换下面导入方式
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
import numpy as np # Python的一种开源的数值计算扩展
import matplotlib.pyplot as plt # Python的一种绘图库
np.random.seed(5) # 设置产生伪随机数的类型
sx = np.linspace(-1, 1, 100) # 在-1到1之间产生100个等差数列作为图像的横坐标
# 根据y=2*x+1+噪声产生纵坐标
# randn(100)表示从100个样本的标准正态分布中返回一个样本值,0.4为数据抖动幅度
sy = 2 * sx + 1.0 + np.random.randn(100) * 0.4
# plt.scatter(x, y) # 生成散点图
# plt.plot(x, 2 * x + 1, color='red', linewidth=3) # 生成直线y=2x+1
# plt.show()
定义模型
定义模型并不会立即执行,而是要在训练时建立的session会话时运行,减少了系统对底层代码的平凡调用,这也是tensorflow的机制
# 定义函数模型,y=kx+b
def model(x, k, b):
return tf.multiply(k, x) + b
# 定义模型中的参数变量,并为其赋初值
k = tf.Variable(1.0, dtype=tf.float32, name='k')
b = tf.Variable(0, dtype=tf.float32, name='b')
# 定义训练数据的占位符,x为特征值,y为标签
x = tf.placeholder(dtype=tf.float32, name='x')
y = tf.placeholder(dtype=tf.float32, name='y')
# 通过模型得出特征值x对应的预测值yp
yp = model(x, k, b)
训练模型
根据每轮训练得到的k,b值,可以看到模型不断地拟合
# 训练模型,设置训练参数(迭代次数、学习率)
train_epoch = 10
rate = 0.05
# 定义均方差为损失函数
loss = tf.reduce_mean(tf.square(y - yp))
# 定义梯度下降优化器,并传入参数学习率和损失函数
optimizer = tf.train.GradientDescentOptimizer(rate).minimize(loss)
ss = tf.Session()
init = tf.global_variables_initializer()
ss.run(init)
# 进行多轮迭代训练,每轮将样本值逐个输入模型,进行梯度下降优化操作得出参数,绘制模型曲线
for _ in range(train_epoch):
for x1, y1 in zip(sx, sy):
ss.run([optimizer, loss], feed_dict={x: x1, y: y1})
tmp_k = k.eval(session=ss)
tmp_b = b.eval(session=ss)
plt.plot(sx, tmp_k * sx + tmp_b)
print(tmp_k, tmp_b)
plt.show()
ss.close()
模型预测
用训练得到的k,b值导入y=kx+b中,根据预测特征值x得出标签y