zoukankan      html  css  js  c++  java
  • 机器学习:Keras 简例

    安装

    pip install keras
    

    Keras 有两个 Backend,也就是 Keras 基于什么东西来做运算
    Keras 的两个 Backend,一个是 Theano,一个是 TensorFlow
      
    每次当我们 import keras 的时候, 就会看到屏幕显示当前使用的 Backend

    >>> import keras
    Using TensorFlow backend.
    

    配置文件

    lin@Master:~$ cat ~/.keras/keras.json
    {
        "epsilon": 1e-07,
        "floatx": "float32",
        "image_data_format": "channels_last",
        "backend": "tensorflow"
    }
    

    直接修改配置文件可能会在 import 时出现错误信息
      解决方案
      1. 在其他文本编辑器内编辑好这段文本, 然后整体拷贝到这个文件里
      2. 在 Terminal 中直接输入临时环境变量执行: KERAS_BACKEND=tensorflow python -c "from keras import backend"
      3. 在 python 代码中 import keras 前加入一个环境变量修改的语句: os.environ['KERAS_BACKEND']='theano'
      
    为什么用 Keras
      TensorFlow 提供很多基础的操作, 要写完一个模型比如神经网络还需要很多代码
      Keras 之类的第三方软件对 TensorFlow, Theano 等作了封装
      适合于
        简易和快速的原型设计
        支持 CNN 和 RNN, 或二者的结合
        无缝 CPU 和 GPU 切换
      
    Keras 适用的 Python 版本是:Python 2.7-3.6
      
    Keras 的设计原则是
      用户友好:提供一致而简洁的 API
      模块性:网络层、损失函数、优化器、初始化策略、激活函数、正则化方法都是独立的模块
      易扩展性:添加新模块超级容易,只需要仿照现有的模块编写新的类或函数即可
      
      与 Python 协作:Keras 没有单独的模型配置文件类型 (作为对比, caffe 有)
              模型由 python 代码描述, 使其更紧凑和更易 debug, 并提供了扩展的便利性
      
      
    神经网络例子

    from sklearn import datasets
    from keras.models import Sequential
    from keras.layers import Dense, Activation
    from keras.utils import to_categorical
    
    ## 创建一个空的顺序序列的网络结构
    model = Sequential()
    
    ## 添加 Dense (既全连接层)
    ## units 是该层的神经元个数既输出数据维度
    ## activation 是激活函数(没指定就用 f(x)=x )
    ## use_bias 是否使用偏移
    ## input_dim 输入数据维度
    model.add(Dense(units=64, activation='relu', input_dim=4))
    model.add(Dense(units=32, activation='relu'))
    model.add(Dense(units=3, activation='softmax'))
    
    ## 也可以分两步实现, 把 Activation 作为单独一层
    ## model.add(Dense(units=64, input_dim=100))
    ## model.add(Activation("relu"))
    
    ## 编译模型, 指定损失函数, 优化器, 也可以使用自己自定义的函数
    model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
    
    ## 读取样本数据
    data = datasets.load_iris()
    X, Y = data.data[:-1], data.target[:-1]
    
    ## 转为二进制
    Y = to_categorical(Y)
    
    ## 训练
    model.fit(X, Y, epochs=100, batch_size=32)
    
    ## 评估
    loss_and_metrics = model.evaluate(X, Y, batch_size=128)
    
    ## 预测
    classes = model.predict(X, batch_size=128)
    



    卷积神经网络

    from keras.layers import Conv2D, MaxPool2D, Dense, Flatten
    from keras.models import Sequential
    from keras.utils import to_categorical
    from sklearn import datasets
    
    lenet = Sequential()
    
    ## 添加卷积层, filters 核数, kernel_size 核大小, strides 步长, padding 填充方式, input_shape 输入数据维度
    lenet.add(Conv2D(filters=6, kernel_size=3, strides=1, padding='same', input_shape=(8, 8, 1)))
    
    ## 添加池化层, pool_size 大小, strides 步长
    lenet.add(MaxPool2D(pool_size=2, strides=2))
    
    ## 继续添加卷积层
    lenet.add(Conv2D(filters=16, kernel_size=3, strides=1, padding='valid'))
    
    ## 继续添加池化层
    lenet.add(MaxPool2D(pool_size=2, strides=2))
    
    ## 扁平化, 将多维数据转化为一维数据
    lenet.add(Flatten())
    
    ## 添加全连接层
    lenet.add(Dense(120))
    lenet.add(Dense(84))
    lenet.add(Dense(10, activation='softmax'))
    
    ## 编译
    lenet.compile('sgd', loss='mean_squared_error', metrics=['accuracy'])
    
    ## 读取样本数据
    digits = datasets.load_digits()
    X, Y = digits.data[:-1], digits.target[:-1]
    X = X.reshape(-1,8,8,1)                         ## 将 X 从 (1796, 64) 变为 (1796, 8, 8, 1)
    Y = to_categorical(Y)                           ## 将 Y 二进制化 (one-hot)
    
    ## 训练
    lenet.fit(X, Y, batch_size=64, epochs=50, validation_data=[X, Y])
    
    ## 预测
    lenet.predict(X)
    



    可视化

    sudo apt-get install graphviz
    sudo pip install graphviz
    sudo pip install pydot_ng
    
    
    from keras.models import Sequential
    from keras.layers.core import Dense, Dropout, Activation
    from keras.layers.embeddings import Embedding
    from keras.layers.recurrent import LSTM
    from keras.utils import plot_model
    
    model = Sequential()
    model.add(Embedding(input_dim=1024, output_dim=256, input_length=50))
    model.add(LSTM(128))
    model.add(Dropout(0.5))
    model.add(Dense(1))
    model.add(Activation('sigmoid'))
    
    plot_model(model, to_file='model.png')
    




  • 相关阅读:
    如何在Nginx下配置PHP程序环境
    Nginx服务器不支持PATH_INFO的问题及解决办法
    php内置函数分析之str_pad()
    php常用几种设计模式的应用场景
    func_get_args()在php71与php56的区别
    Restful api 防止重复提交
    Game-Tech小游戏专场第二趴,这次帝都见
    入门系列之在Ubuntu上使用MySQL设置远程数据库优化站点性能
    入门系列之在Ubuntu上使用Netdata设置实时性能监控
    叶聪:朋友圈背后的计算机视觉技术与应用
  • 原文地址:https://www.cnblogs.com/moonlight-lin/p/12578717.html
Copyright © 2011-2022 走看看