• 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('
    Testing ==========')
    cost = model.evaluate(X_test, y_test, batch_size=40)
    print('test cost:', cost)
    W, b = model.layers[0].get_weights()    # 查看训练出的网络参数

    print('Weights=', W, ' biases=', 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()

    。。。

  • 相关阅读:
    Rabbitmq 性能测试
    B+树图文详解
    图的概念和存储(邻接矩阵,邻接表)
    WebApi系列文章
    Asp.Net MVC项目集成Swagger
    正则表达式匹配两个特殊字符中间的内容
    数学常数e的含义
    十大排序算法总结
    C#集合类型大揭秘
    深入System.Web.Caching命名空间 教你Hold住缓存管理(三)
  • 原文地址:https://www.cnblogs.com/shanger/p/12005542.html
Copyright © 2020-2023  润新知