一、非线性回归模型
数据呈现非线性状,想要预测数据的走向
二、代码分析
1、导入相关模块
import numpy as np
import matplotlib.pyplot as plt
from tensorflow import keras
2、建立非线性随机数据作为数据集
#建立随机数作为数据集
x_data = np.linspace(-0.5,0.5,200) #从-0.5到0.5取均匀的200个数
noise = np.random.normal(0,0.02,x_data.shape)
y_data = np.square(x_data)+noise
其中square函数指的是平方
3、建立非线性神经网络模型
#使用keras的Sequential函数建立一个顺序模型
model = keras.Sequential()
#在模型中添加全连接层和激活函数
model.add(keras.layers.Dense(units=10,input_dim=1))
model.add(keras.layers.Activation('tanh'))
model.add(keras.layers.Dense(units=1))
model.add(keras.layers.Activation('tanh'))
#定义优化算法
sgd = keras.optimizers.SGD(learning_rate=0.3)
#优化方法:sgd(随机梯度下降算法)
#损失函数:mse(均方误差)
model.compile(optimizer=sgd,loss='mse')
注意这里与线性回归模型不同的是,在每个全连接层之间添加激活函数,以将模型变为非线性的,以此能够拟合非线性数据
sgd优化重新定义其学习率,以较快地完成学习,如果使用默认学习率,建议增加训练迭代次数
4、对模型进行训练
for step in range(3001):
#每次训练一个批次
cost = model.train_on_batch(x_data,y_data)
#每500个batch打印一次cost
if step % 500 == 0:
print('cost:',cost)
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()
运行结果如下图所示,蓝色表示生成的随机数作为数据集的点,红色的线表示预测值