Keras 训练一个单层全连接网络的线性回归模型

1、准备环境,探索数据

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

# 创建数据集
rng = np.random.RandomState(27) 
X = np.linspace(-3, 5, 300)
rng.shuffle(X)    # 将数据集随机化
y = 0.5 * X + 1 + np.random.normal(0, 0.05, 300) # 假设真实模型为:y = 0.5X + 1

# 绘制数据集
plt.scatter(X, y, s=0.5)
plt.show()

 

2、准备数据训练模型

# 划分训练集和测试集
X_train, y_train = X[:400], y[:400]     
X_test, y_test = X[-100:], y[-100:]       

# 定义模型
model = Sequential () # 用 Keras 序贯模型(Sequential)定义一个单输入单输出的模型 model
model.add(Dense(output_dim=1, input_dim=1)) # 通过 add()方法一层, Dense 是全连接层,第一层需要定义输入
                                            
# 设置模型参数
model.compile(loss='mse', optimizer='sgd')  # 通过compile()方法选择损失函数(均方误差)和 优化器(随机梯度下降

# 开始训练
print('Training ==========')
for step in range(301):
    cost = model.train_on_batch(X_train, y_train) # Keras 的 train_on_batch() 函数训练模型
    if step % 100 == 0:
        print('train cost: ', cost)

 

3、测试训练好的模型

print('\nTesting ==========')
cost = model.evaluate(X_test, y_test, batch_size=40)
print('test cost:', cost)
W, b = model.layers[0].get_weights()    # 查看训练出的网络参数

print('Weights=', W, '\nbiases=', b) # 由于网络只有一层,且每次训练的输入和输出只有一个节点,因此第一层训练出 y=WX+b 的模型,其中 W,b 为训练出的参数

 最终的测试 cost 为: 0.0026768923737108706

 

4、可视化测试结果

y_pred = model.predict(X_test)  # 用测试集进行预测
plt.scatter(X_test, y_test, s=4)    # 绘制测试点图
plt.plot(X_test, y_pred, lw=0.7)    # 绘制回归直线
plt.show()

。。。

 

posted @ 2019-12-08 13:41  赏尔  阅读(1162)  评论(0编辑  收藏  举报