美文网首页
理解和使用Keras的sequential模型

理解和使用Keras的sequential模型

作者: 一块自由的砖 | 来源:发表于2019-12-16 18:20 被阅读0次

    Sequential模型

    Sequential模型字面上的翻译是顺序模型,感觉是简单的线性模型,但实际上Sequential模型可以构建非常复杂的神经网络,包括全连接神经网络、卷积神经网络(CNN)、循环神经网络(RNN)等等。Sequential更准确的理解应该为堆叠,通过堆叠许多不同的层,构建出深度神经网络。

    Sequential模型的核心操作

    最核心的操作是添加图层,以下收录一些比较流行的图层:

    图层名称 操作方法 备注
    卷积层 model.add(ConvnD(64, (3, 3), activation='relu')) 对n(1,2,3)维输入进行卷积操作
    转换层 model.add(Reshape((3, 4), input_shape=(12,))) Reshape层用来将输入shape转换为特定的shape
    全连接层 model.add(Dense(256, activation='relu')) 实现的运算是output = activation(dot(input, kernel)+bias)。其中activation是逐元素计算的激活函数,kernel是本层的权值矩阵,bias为偏置向量
    dropout model.add(Dropout(0.5)) Dropout将在训练过程中每次更新参数时按一定概率(rate)随机断开输入神经元,Dropout层用于防止过拟合。
    Flattening layer(展平层) model.add(Flatten()) 将输入“压平”,即把多维的输入一维化,常用在从卷积层到全连接层的过渡。

    备注:
    可以参考官方介绍layer的中文文档:https://keras-cn.readthedocs.io/en/latest/layers/about_layer/

    Sequential模型开发流程

    Sequential模型构建通常5步:
    1.定义模型
    2.定义目标
    3.输入数据
    4.训练模型
    5.评估模型

    Sequential模型实操

    import keras
    import numpy as np
    import matplotlib.pyplot as plt
    # Sequential按顺序构成的模型
    from keras.models import Sequential
    # Dense全连接层
    from keras.layers import Dense, Activation
    # 优化器:随机梯度下降
    from keras.optimizers import SGD
    
    # 生成非线性数据模型
    import numpy as np
    import tensorflow as tf
    import matplotlib.pyplot as plt
    
    #训练数据和测试数据
    number = 100
    x_data = np.linspace(-4, 4, number)
    y_data = np.sin(x_data)+np.random.uniform(-0.5, 0.5, number)
    
    print(x_data)
    print(y_data)
    # 显示随机点
    plt.scatter(x_data, y_data)
    plt.show()
    ##################################################################################
    # 构建一个顺序模型
    model = Sequential()
    
    # 在模型中添加一个全连接层
    # 神经网络结构:1-10-1,即输入层为1个神经元,隐藏层10个神经元,输出层1个神经元。 
    
    # 激活函数加法1
    model.add(Dense(units=10, input_dim=1))
    model.add(Activation('tanh'))
    model.add(Dense(units=1))
    model.add(Activation('tanh'))
    
    # 定义优化算法
    sgd = SGD(lr=0.3)
    # sgd: Stochastic gradient descent,随机梯度下降法
    # mse: Mean Squared Error, 均方误差
    model.compile(optimizer=sgd, loss='mse')
    
    # 进行训练
    for step in range(3000):
        # 每次训练一个批次
        cost = model.train_on_batch(x_data, y_data)
        # 每500个batch打印一次cost值
        if step % 200 == 0:
            print('cost: ', cost)
    # 打印权值和偏置值
    W, b = model.layers[0].get_weights()
    print('W:', W, ' b: ', b)
    print(len(model.layers))
    
    # 把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()
    

    上面的代码中,输入层是全连接层。接下来就是为模型添加中间层和输出层。定义优化器(并指定损失函数)来指定反向传播的计算方法。在keras中,Sequential模型的compile方法用来完成这一操作。
    例如,在下面的这一行代码中,我们使用’sgd’优化器,损失函数为’mse’。

    model.compile(optimizer=sgd, loss='mse')
    

    创建了模型开始训练。设置迭代次数、验证数据集等等。

    cost = model.train_on_batch(x_data, y_data)
    

    最后,使用predict方法来看看预测结果:

    y_pred = model.predict(x_data)
    

    以上就是在Keras中使用Sequential模型的基本构建块,相比tensorflow,keras的代码更少,不用关心具体的算法实现。
    总结
    keras中的Sequential模型其实非常强大,而且接口简单易懂,大部分问题,只需要使用Sequential模型即可满足需求。只是当工具使用即可,集中精力解决具体的问题。

    相关文章

      网友评论

          本文标题:理解和使用Keras的sequential模型

          本文链接:https://www.haomeiwen.com/subject/ocednctx.html