Keras学习

来源:互联网 发布:网络购物诈骗类型 编辑:程序博客网 时间:2024/05/19 14:38

一、Keras概述

1、介绍

  • Keras 是一个兼容 Theano 和 Tensorflow 的神经网络高级包
  • 用他来组件一个神经网络更加快速, 几条语句就搞定
  • Keras 可以再在 Windows 和 MacOS 或者 Linux 上运行
  • 网站:https://keras.io/

2、安装Keras

  • 需要事先安装好numpyscipy
  • 直接pip安装:pip install keras
  • Keras有两个backend,就是是基于什么进行运算的,一个是Tensorflow,一个是Theano
  • 通过修改配置文件永久修改

    • 默认配置是Tensorflow,这里改为Theano
    • Windows在用户的文件夹下有个配置文件:C:\Users\bob\.keras文件夹下的keras.json文件
    • 修改即可
      1
      2
      3
      4
      5
      6
      {
      "image_dim_ordering": "tf",
      "epsilon": 1e-07,
      "floatx": "float32",
      "backend": "theano"
      }
  • 修改当前脚本的环境变量

    1
    2
    3
    import os
    os.environ['KERAS_BACKEND']='tensorflow' # 或者theano
    import keras

二、搭建神经网络

1、一个神经网络例子

  • 导入包

    1
    2
    3
    4
    5
    import keras
    import numpy as np
    from keras.models import Sequential # Sequential顺序建立
    from keras.layers import Dense # 全连接层
    import matplotlib.pyplot as plt
  • 制造数据

    1
    2
    3
    4
    5
    6
    7
    8
    '''制造数据,并且显示'''
    X = np.linspace(-1,1,200)
    np.random.shuffle(X)
    Y = 0.5 * X + 2 + np.random.normal(0,0.05,(200,))
    plt.scatter(X,Y)
    plt.show()
    X_train,Y_train = X[:160],Y[:160]
    X_test,Y_test = X[160:],Y[160:]
  • 建立模型

    1
    2
    3
    '''建立模型'''
    model = Sequential() # 通过Sequential建立model
    model.add(Dense(output_dim=1, input_dim=1)) # model.add添加神经层,指定输入和输出维度
  • 激活模型

    1
    2
    '''激活模型'''
    model.compile(optimizer='sgd', loss='mse')
  • 训练模型

    1
    2
    3
    4
    for i in range(500):
    cost = model.train_on_batch(X_train,Y_train) # 使用批训练
    if i % 50 == 0:
    print(cost)
  • 测试集的cost误差

    1
    2
    cost = model.evaluate(X_test, Y_test, batch_size=40)
    print(cost)
  • 学到的权重和偏置

    1
    2
    3
    '''输出学到的权重和偏置'''
    W,b = model.layers[0].get_weights()
    print(W,b)
  • 预测

    1
    Y_pred = model.predict(X_test)

2、手写数字识别例子–mnist

  • 导入包:

    1
    2
    3
    4
    5
    6
    7
    import keras
    from keras.datasets import mnist
    from keras.utils import np_utils
    import numpy as np
    from keras.models import Sequential # Sequential顺序建立
    from keras.layers import Dense,Activation # 全连接层
    from keras.optimizers import RMSprop
  • 加载并预处理数据

    1
    2
    3
    4
    5
    6
    '''加载和预处理数据'''
    (X_train,y_train),(X_test,y_test) = mnist.load_data() # 下载数据集,windows在当前用户的对应目录下:C:\Users\bob\.keras\datasets
    X_train = X_train.reshape(X_train.shape[0],-1)/255 # X_train是(60000, 28, 28),reshape一下变成(60000,784),然后在标准化
    X_test = X_test.reshape(X_test.shape[0],-1)/255
    y_train = np_utils.to_categorical(y_train,nb_classes=10) # y_train对应的数字1,2,3....转换为0/1映射
    y_test = np_utils.to_categorical(y_test,nb_classes=10)
  • 建立模型

    1
    2
    3
    4
    5
    6
    7
    '''建立模型'''
    model = Sequential(layers=[
    Dense(output_dim=32,input_dim=784), # 第一层,输入为784维,输出为32维
    Activation('relu'), # 激励函数为relu
    Dense(10), # 第二层,这里不需要指定输入层维度,全连接会使用上一层的输出,这里即32
    Activation('softmax'), # 激励函数,也是最后的预测函数使用softmax
    ])
  • 激活模型

    1
    2
    3
    4
    5
    6
    '''定义optimizer'''
    rmsprop = RMSprop()
    '''激活模型'''
    model.compile(optimizer=rmsprop,
    loss='categorical_crossentropy', # 分类中使用交叉熵损失函数
    metrics=['accuracy']) # 计算准确度
  • 训练模型

    1
    model.fit(X_train,y_train,nb_epoch=2,batch_size=100) # nb_epoch整个训练集训练次数
  • 测试集上预测信息

    1
    2
    3
    4
    '''测试集测试训练出的模型'''
    loss,accuracy = model.evaluate(X_test,y_test)
    print('loss:',loss)
    print('accuracy',accuracy)

3、卷积神经网络CNN–mnist

  • 导入包

    1
    2
    3
    4
    5
    6
    7
    import keras
    from keras.datasets import mnist
    from keras.utils import np_utils
    import numpy as np
    from keras.models import Sequential # Sequential顺序建立
    from keras.layers import Dense,Activation,Convolution2D,MaxPooling2D,Flatten
    from keras.optimizers import RMSprop,Adam
  • 建立模型

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    model = Sequential()
    ## 第一层卷积
    model.add(Convolution2D(nb_filter=32, # 32个filter,即从32个特征提取
    nb_row=5, # patch大小
    nb_col=5,
    border_mode='same',
    dim_ordering='th', # theano使用th,TensorFlow使用tf
    input_shape=(1,28,28,) # 输入的大小,1表示输入的channel通道,由于是黑白图所以是1,若是rgb是3个通道
    ))
    ## 第一层激活层
    model.add(Activation('relu'))
    ## 第一层池化层
    model.add(MaxPooling2D(
    pool_size=(2,2), # 2x2的大小
    strides=(2,2), # 步长为2,纵向和横向
    border_mode='same'
    ))
    ### 第二层卷积层
    model.add(Convolution2D(nb_filter=64, # 不需要指定输入的大小了
    nb_row=5,
    nb_col=5,
    border_mode='same'
    ))
    ### 第二层激活层
    model.add(Activation('relu'))
    ### 第二层池化层
    model.add(MaxPooling2D(border_mode='same'))
    #### 全连接层
    model.add(Flatten()) # 展开
    model.add(Dense(output_dim=1024)) # 输出维度为1024
    model.add(Activation('relu'))
    model.add(Dense(output_dim=10)) # 最终输出为10类
    model.add(Activation('softmax'))
  • 激活模型

    1
    2
    3
    4
    adam = Adam()
    model.compile(optimizer=adam, # 使用adam的optimizer
    loss='categorical_crossentropy',
    metrics=['accuracy'])
  • 训练模型

    1
    model.fit(X_train, y_train)
  • 测试集计算结果

    1
    2
    3
    4
    '''测试集模型'''
    loss,accuracy = model.evaluate(X_test,y_test)
    print("loss",loss)
    print('accuracy',accuracy)


原文地址: http://lawlite.me/2017/02/14/Keras%E5%AD%A6%E4%B9%A0/

原创粉丝点击