Keras-线性回归

754 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

神经网络可以用来模拟回归问题 (regression),实质上是单输入单输出神经网络模型。

一、导入相关模块

1、numpy :用于生成训练数据

2、pyplot :用于绘制散点图,直观显示拟合结果

3、Sequential:顺序模型(通过堆叠多层,构建深度神经网络)

4、Dense:全连接神经层

import numpy as np
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import Dense

二、生成数据

生成500个随机数据,并为其添加随机噪声,再生成随机数据散点图

# 使用numpy生成500个随机点
x_data = np.random.rand(500)
# 添加噪声
noise = np.random.normal(0,0.01,x_data.shape)
y_data = x_data*0.1 + 0.2 + noise

#散点图
plt.scatter(x_data,y_data)
plt.show()

image.png

三、建立模型

使用 Sequential 建立 model,再用 model.add 添加神经层,添加的是 Dense 全连接神经层。 Dense 全连接神经层参数有两个,一个是输入数据的维度,另一个units代表神经元数,即输出单元数。如果需要添加下一个神经层的时候,不用再定义输入的纬度,因为它默认就把前一层的输出作为当前层的输入。再使用model.compile来设置loss函数和优化器,误差函数用的是 mse均方误差;优化器用的是 sgd 随机梯度下降法。

# 构建神经网络模型
model = Sequential()
# 在模型中添加全连接层
model.add(Dense(units=1,input_dim=1))

# 选定loss函数和优化器
# mse :Mean Squared Error,均方误差
# sgd:Stochastic gradient descent,随机梯度下降法
model.compile(loss='mse', optimizer='sgd')

四、训练模型

训练时用 model.train_on_batch 一批一批的训练 x_data, y_data。默认的返回值是 cost,每500步输出一下结果。最后打印出训练后的权值和偏置值

#训练过程
print('Training -----------')
#训练5001个批次
forstepinrange(5001):
    cost = model.train_on_batch(x_data, y_data)
ifstep % 500 == 0:
        print("After %d trainings, the cost: %f"% (step, cost))

#打印权值和偏置值
W, b = model.layers[0].get_weights()
print('Weights=', W,'\nbiases=', b)

image.png

五、可视化训练结果

最后绘制出出预测结果,与训练集的值进行对比。

# 将训练结果绘出
# 预测值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()

image.png