zoukankan      html  css  js  c++  java
  • keras 实现人工神经网络

    
    
    #encoding=utf-8
    import numpy as np
    from keras.models import Sequential
    from keras.layers import Dense,Activation#激活函数可以通过设置单独的激活层实现,也可以在构造层对象时通过传递activation参数实现。
    from  keras.optimizers import SGD#随机梯度下降法,支持动量参数,支持学习衰减率,支持Nesterov动量。
    
    '''
    快速开始序贯(Sequential)模型
    
    序贯模型是多个网络层的线性堆叠,也就是“一条路走到黑”。
    
    可以通过向Sequential模型传递一个layer的list来构造该模型:
    
    from keras.models import Sequential
    from keras.layers import Dense, Activation
    
    model = Sequential([
    Dense(32, units=784),
    Activation('relu'),
    Dense(10),
    Activation('softmax'),
    ])
    
    也可以通过.add()方法一个个的将layer加入模型中:
    
    model = Sequential()
    model.add(Dense(32, input_shape=(784,)))
    model.add(Activation('relu'))
    
    指定输入数据的shape
    
    模型需要知道输入数据的shape,因此,Sequential的第一层需要接受一个关于输入数据shape的参数,
    后面的各个层则可以自动的推导出中间数据的shape,因此不需要为每个层都指定这个参数。有几种方法来为第一层指定输入数据的shape
    传递一个input_shape的关键字参数给第一层,input_shape是一个tuple类型的数据,其中也可以填入None,
    如果填入None则表示此位置可能是任何正整数。数据的batch大小不应包含在其中。
    有些2D层,如Dense,支持通过指定其输入维度input_dim来隐含的指定输入数据shape。
    一些3D的时域层支持通过参数input_dim和input_length来指定输入shape。
    如果你需要为输入指定一个固定大小的batch_size(常用于stateful RNN网络),
    可以传递batch_size参数到一个层中,例如你想指定输入张量的batch大小是32,数据shape是(6,8),
    则你需要传递batch_size=32和input_shape=(6,8)。
    
    model = Sequential()
    model.add(Dense(32, input_dim=784))
    
    model = Sequential()
    model.add(Dense(32, input_shape=784))
    
    
    编译
    
    在训练模型之前,我们需要通过compile来对学习过程进行配置。compile接收三个参数:
    
        优化器optimizer:该参数可指定为已预定义的优化器名,如rmsprop、adagrad,或一个Optimizer类的对象.
    
        损失函数loss:该参数为模型试图最小化的目标函数,它可为预定义的损失函数名,如categorical_crossentropy、mse,也可以为一个损失函数。详情见losses
    
        指标列表metrics:对分类问题,我们一般将该列表设置为metrics=['accuracy']。
        指标可以是一个预定义指标的名字,也可以是一个用户定制的函数.指标函数应该返回单个张量,
        或一个完成metric_name - > metric_value映射的字典
    
    
    '''
    def main():
        from sklearn.datasets import  load_iris
        iris = load_iris()
        print(iris["target"])
        from sklearn.preprocessing import LabelBinarizer
        print LabelBinarizer().fit_transform(iris["target"])
    
        from sklearn.model_selection import train_test_split
        train_data, test_data, train_traget, test_target = train_test_split(iris.data, iris.target, test_size=0.2,random_state=1)
        labels_train = LabelBinarizer().fit_transform(train_traget)
        labels_test = LabelBinarizer().fit_transform(test_target)
    
        model= Sequential([
            Dense(5,input_dim=4),
            Activation("relu"),#激活函数
            Dense(3),
            Activation("sigmoid"),#激活函数自己看去。
    
        ])
    
        sgd  = SGD(lr=0.01,decay=1e-6,momentum=0.9,nesterov=True)
        model.compile(optimizer=sgd,loss="categorical_crossentropy")
        model.fit(train_data,labels_train,nb_epoch=200,batch_size=40)
        print(model.predict_classes(test_data))
        model.save_weights("./python_source/w")
        model.load_weights("./python_source/w")
        #使用这个是会出现错误提示缺少h5py,直接pip install h5py 就可以了。
    if __name__ == '__main__':
        main()
    
    
    
    
     
    情不知所起一往而深
  • 相关阅读:
    关于静态链接库(Lib,.A)与动态链接库(DLL,.SO)
    #pragma once
    动态链接库和静态链接库的区别
    C++编写、生成、调用动态链接库
    cmake 命令行
    Build Slicer application--Compiling and installing Slicer from source
    3DSlicer开发之路——Extensions(九)
    3DSlicer开发之路——Extensions(八)
    3DSlicer开发之路——Extensions(七)
    placeholder文字颜色与是否显示兼容性
  • 原文地址:https://www.cnblogs.com/xingbiaoblog/p/7977849.html
Copyright © 2011-2022 走看看