本博客现阶段所用的是tensorflow2.0版本,keras已经被集成于其中,所以不同版本的tensorflow可能用法有所不同,但是大同小异。
一、线性回归模型
线性回归大致意思就是根据给出的数据,预测接下来数据的走向,很经典的应用就是预测股票市场之类的,但是注意一般都要求数据呈现线性特征,效果才会好。
二、代码分析
1、导入numpy模块、matplotlib模块、tensorflow中的keras模块
import numpy as np
import matplotlib.pyplot as plt
from tensorflow import keras
其中numpy模块是进行数学运算的强大工具,matplotlib是绘图的工具,keras是神经网络搭建的工具
2、建立一个y=0.1 * x + 0.02的100个随机数据点,这些数据点都加了噪声在其中
#使用numpy生成100个随机点
x_data = np.random.random(100)
noise = np.random.normal(0,0.01,x_data.shape)
y_data = x_data*0.1 + 0.2 + noise
其中noise是从均值为0,标准差为0.01的数据中取出的数据,使得y_data更加符合现实环境下的情况
3、定义学习的模型
#使用keras的Sequential函数建立一个顺序模型
model = keras.Sequential()
#在模型中添加一个全连接层
model.add(keras.layers.Dense(units=1,input_dim=1))
#优化方法:sgd(随机梯度下降算法)
#损失函数:mse(均方误差)
model.compile(optimizer='sgd',loss='mse')
使用顺序模型、构建拥有一个节点的全连接层,且输入是一维的
再使用优化算法、损失函数对模型进行优化
4、定义学习模型后,feed数据进去进行学习
for step in range(3001):
#每次训练一个批次
cost = model.train_on_batch(x_data,y_data)
#每500个batch打印一次cost
if step % 500 == 0:
print('cost:',cost)
#打印权值和偏置值
W,b = model.layers[0].get_weights()
print('W:',W,'b:',b)
5、最后在图上显示出训练好的模型预测数据,以及原始点
#x_data输入到网络中,得到预测值y_pred
y_pred = model.predict(x_data)
#显示随机点的结果
plt.scatter(x_data,y_data)
#显示预测点的结果
plt.plot(x_data,y_pred,'r-',lw=3)
plt.show()
plt.plot函数中‘r-’参数是指用红色连线画出预测结果,最终显示的结果如下图所示
蓝色的点是生成的随机点,红色的线是数据预测形成的线