zoukankan      html  css  js  c++  java
  • Keras实现简单BP神经网络

    BP 神经网络的简单实现

    from keras.models import Sequential #导入模型
    from keras.layers.core import Dense #导入常用层
    train_x,train_y #训练集
    test_x,text_y #测试集
    model=Sequential() #初始化模型
    model.add(Dense(3,input_shape=(32,),activation='sigmoid',init='uniform'))) #添加一个隐含层,注:只是第一个隐含层需指定input_dim
    model.add(Dense(1,activation='sigmoid')) #添加输出层
    model.compile(loss='binary_crossentropy', optimizer='sgd', metrics=['accuracy'])  # 编译,指定目标函数与优化方法
    model.fit(train_x,train_y ) # 模型训练
    model.evaluate(test_x,text_y ) #模型测试
    

    常用层

    常用层对应于core模块,core内部定义了一系列常用的网络层,包括全连接、激活层等

    Dense层

    keras.layers.core.Dense(units, activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)
    

    Dense就是常用的全连接层,所实现的运算是output = activation(dot(input, kernel)+bias)。其中activation是逐元素计算的激活函数,kernel是本层的权值矩阵,bias为偏置向量,只有当use_bias=True才会添加。

    如果本层的输入数据的维度大于2,则会先被压为与kernel相匹配的大小。

    #example

    # as first layer in a sequential model:
    | model = Sequential()
    | model.add(Dense(32, input_shape=(16,)))
    | # now the model will take as input arrays of shape (*, 16)
    | # and output arrays of shape (*, 32)
    |
    | # after the first layer, you don't need to specify
    | # the size of the input anymore:
    | model.add(Dense(32))

    Keras主要包括14个模块,本文主要对Models、layers、Initializations、Activations、Objectives、Optimizers、Preprocessing、metrics共计8个模块分别展开介绍。 

    1. Model 
    包:keras.models 
    这是Keras中最主要的一个模块,用于对各个组件进行组装 
    eg:

    from keras.models import Sequential
    model=Sequential() #初始化模型
    model.add(...) #可使用add方法组装组件
    

    2. layers 
    包:keras.layers 
    该模块主要用于生成神经网络层,包含多种类型,如Core layers、Convolutional layers等 
    eg:

    from keras.layers import Dense #Dense表示Bp层
    model.add(Dense(input_dim=3,output_dim=5)) #加入隐含层
    

    3. Initializations 
    包:keras.initializations 
    该模块主要负责对模型参数(权重)进行初始化,初始化方法包括:uniform、lecun_uniform、normal、orthogonal、zero、glorot_normal、he_normal等 
    详细说明:http://keras.io/initializations/ 
    eg:

    model.add(Dense(input_dim=3,output_dim=5,init='uniform')) #加入带初始化(uniform)的隐含层
    

    4. Activations 
    包:keras.activations、keras.layers.advanced_activations(新激活函数) 
    该模块主要负责为神经层附加激活函数,如linear、sigmoid、hard_sigmoid、tanh、softplus、relu、 softplus以及LeakyReLU等比较新的激活函数 
    详细说明:http://keras.io/activations/ 
    eg:

    model.add(Dense(input_dim=3,output_dim=5,activation='sigmoid')) 加入带激活函数(sigmoid)的隐含层
    

    Equal to:

    model.add(Dense(input_dim=3,output_dim=5)) 
    model.add(Activation('sigmoid'))
    

    5. Objectives 
    包:keras.objectives 
    该模块主要负责为神经网络附加损失函数,即目标函数。如mean_squared_error,mean_absolute_error ,squared_hinge,hinge,binary_crossentropy,categorical_crossentropy等,其中binary_crossentropy,categorical_crossentropy是指logloss 
    注:目标函数的设定是在模型编译阶段 
    详细说明:http://keras.io/objectives/ 
    eg:

     model.compile(loss='binary_crossentropy', optimizer='sgd') #loss是指目标函数
    

    6. Optimizers 
    包:keras.optimizers 
    该模块主要负责设定神经网络的优化方法,如sgd。 
    注:优化函数的设定是在模型编译阶段 
    详细说明:http://keras.io/optimizers/ 
    eg:

    model.compile(loss='binary_crossentropy', optimizer='sgd') #optimizer是指优化方法
    

    7. Preprocessing 
    包:keras.preprocessing.(imagesequence ext) 
    数据预处理模块,不过本人目前尚未用过 

    8. metrics 
    包:keras.metrics 
    与sklearn中metrics包基本相同,主要包含一些如binary_accuracy、mae、mse等的评价方法 
    eg:

    predict=model.predict_classes(test_x) #输出预测结果
    keras.metrics.binary_accuracy(test_y,predict) #计算预测精度

      

      

  • 相关阅读:
    Android中没有插入SD情况下的文件写入和读取
    Android在OnCreate中获取控件的宽度和高度
    Android Adapter遇到的崩溃问题
    IIS Server Application Unavailable 解决方法
    Silverlight跨域访问WebService解决方法
    Silverlight 与 JS交互
    Dell 1440 黑苹果 (从10.6.3升级到10.6.8)
    Android控件系列之相册Gallery&Adapter适配器入门&控件缩放动画入门
    Android颜色编辑器的制作中遇到的问题
    马云讲给在工厂里工作的员工的话(转自qq)
  • 原文地址:https://www.cnblogs.com/eniac1946/p/7424737.html
Copyright © 2011-2022 走看看