一 原理说明
1.损失函数: 梯度下降算法使用均方差刻画损失函数:
2.寻找损失函数最低点
为了找到损失函数最低点,需要确定两个问题:下降的方向和下降的步长。
横坐标是,纵坐标是,使损失函数变小的方向应该是点梯度的方向,梯度为0的点是最低点。
得知前进方向后计算前进距离,表示学习率,
重复上式,直到损失函数值收敛。过大会错过最低点,过小会耗时过长。
二 代码实现
import tensorflow as tf
#查看tensorflow版本
print('Tensorflow Vesion: {}'.format(tf.__version__))
import pandas as pd
data = pd.read.csv(file_path.csv) #将file_path替换成数据集路径
#查看数据集
data
#通过绘图观察参数关系
import matplotlib.pyplot as plt
%matplotlib inline
plt.scatter(data.v1,data.v2) #v1替换成自变量名称,v2替换成输出值名称
x = data.v1
y = data.v2
#顺序搭建模型
#模型初始化,里面没有内容
model = tf.keras.Sequential()
#在模型中添加层
'''
layers中有很多层可以使用,用的最多的是Dense层
Dense层的作用就是建立我们需要的线性回归模型
Dense层中有两个参数需要注意:
1 表示输出数据的维度,也就是"输出多少个单元数"
input_shape 表示输入数据的形状,数据以元组的形式输入,维度也是1,写成(1,)
'''
model.add(tf.keras.layers.Dense(1, input_shape=(1,))
#看一下模型的形状
model.summary()
"""可以看到Dense层:
输出形状(None,1)中第一个维度表示输入样本的维度
None可以设置成100,代表100个维度为1的样本输入进去。
但是由于输入样本数一般难以确定,有可能会一个批次一个批次输入进去,所以一般不设置。
Param=2表示有两个参数
Dense层完成的功能就是执行ax+b,输出的就是预测值
"""
#编译模型
model.compile(optimizer='adam',loss='mse')
"""
optimizer 表示使用的优化方法是梯度下降法
adam 表示具体的优化方法,默认的学习率为0.001
loss 表示损失函数
mse 表示损失函数的刻画方法是用均方差
"""
#模型训练 使用model.fit的方法进行训练,并使用history将训练的过程记录下来
history = model.fit(x,y,epochs = 500) #epochs表示对所有数据的训练次数
#模型预测
model.predict(x) #会返回训练集中所有的预测值
#预测新数据
model.predict(pd.Series([20])) #训练时使用的是pd.Series格式,输入也得是这种格式,20表示需要预测的新数据