1. Keras是什么?
Keras是一个基于Python语言编写的高度抽象与模块化的深度学习库,其最主要的优势在于对初学者友好,用户直接调用封装好的模块即可快速完成原型设计与验证。Keras的底层可以基于Tensorflow或Theano,用户可以自由选择。另外,Keras支持在CPU和GPU之间进行无缝切换,总体而言,个人感觉这是一个相当强大的工具,并且极大地降低了AI学习与开发的门槛。
2. 如何在Ubuntu16. 0464Bit环境下安装与配置Keras?
这部分基本是参照官方手册,主要步骤如下:
1) 首先,进行Ubuntu系统更新与升级。
$sudo apt-get update
$sudo apt-get upgrade
2) 安装Python,Pip,Git,vim等基础开发包
$sudo apt-get install –y python-devpython-pip python-nose git gfortran vim
3) 安装CUDA开发环境(选配,进行GPU加速时需要,使用CPU加速可跳过这一步)
4) 安装相关安装包
$sudo pip install –U –pre pip setuptoolswheel
$sudo pip install –U numpy scipymatplotlib sciket-learn scikit-image
5) 安装theano
sudo pip install –U –pre theano
6) 安装keras
sudo pip install –U –pre keras
3. 如何用Keras快速创建深度学习网络模型并进行训练验证?
基本步骤:
a) 导入各种用到的模块组件,如Sequential,Dense,Dropout,Activation等模块。
from keras.models import Sequential
from keras.layers.core import Dense,Dropout, Activation, Flatten
…
b) 创建模型
例如创建一个简单的Sequential模型,该模型是多个网络层的线性堆叠,用户可以根据自己应用需要灵活地配置Sequential模型的内部具体结构。
创建Sequential模型:
model = Sequential()
c) 配置模型
两种方法对模型进行配置。
第一种方法:通过向Sequential 模型传递一个各层(layer)的列表list来构造该模型。
如:
model= Sequential([
Dense(32,input_dim=784),
Activation('relu'),
Dense(10),
Activation('softmax'),
])
可知,该模型依次由Dense层,relu非线性激活层,Dense层,SoftMax分类层构成。
第二种方法:使用.add()方法一次添加一层到模型中。
如:
model.add(Dense(32,input_dim=784))
model.add(Activation('relu')
d) 编译模型
在模型进行训练之前,通常使用model.compile()方法对学习过程进行配置。这里主要是设置三个参数:优化器optimizer,损失函数loss和指标列表metrics。可以使用系统预定义好的优化器和损失函数,当然也可以自己进行自定义。在解决分类问题时,指标列表metrics通常设置为metrics=['accuracy']
#for a multi-class classification problem
如:model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
e) 训练模型
通常使用model.fit方法,通常需要指定训练的输入数据,数据标签,训练轮数(epochs)和batchsize。
如:
#train the model, iterating on the data in batches
#of 32 samples
model.fit(data, labels, nb_epoch=10,batch_size=32)
f) 在测试集上进行验证
调用model.evaluate()方法,使用测试数据和标签对模型进行验证。
model.evaluate(X_test, Y_test, batch_size=16)
4. 一个完整的例子(使用Mnist数据集进行手写数字识别)
'''Train a simple convnet on the MNIST dataset.
Run on GPU: THEANO_FLAGS=mode=FAST_RUN,device=gpu,floatX=float32 python mnist_cnn.py
Get to 99.25% test accuracy after 12 epochs (there is still a lot of margin for parameter tuning).
16 seconds per epoch on a GRID K520 GPU.
'''
from __future__ import print_function
import numpy as np
np.random.seed(1337) # for reproducibility
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation, Flatten
from keras.layers.convolutional import Convolution2D, MaxPooling2D
from keras.utils import np_utils
batch_size = 128
nb_classes = 10
nb_epoch = 12
# input image dimensions
img_rows, img_cols = 28, 28
# number of convolutional filters to use
nb_filters = 32
# size of pooling area for max pooling
nb_pool = 2
# convolution kernel size
nb_conv = 3
# the data, shuffled and split between tran and test sets
(X_train, y_train), (X_test, y_test) = mnist.load_data()
X_train = X_train.reshape(X_train.shape[0], 1, img_rows, img_cols)
X_test = X_test.reshape(X_test.shape[0], 1, img_rows, img_cols)
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
X_train /= 255
X_test /= 255
print('X_train shape:', X_train.shape)
print(X_train.shape[0], 'train samples')
print(X_test.shape[0], 'test samples')
# convert class vectors to binary class matrices
Y_train = np_utils.to_categorical(y_train, nb_classes)
Y_test = np_utils.to_categorical(y_test, nb_classes)
model = Sequential()
model.add(Convolution2D(nb_filters, nb_conv, nb_conv,
border_mode='valid',
input_shape=(1, img_rows, img_cols)))
model.add(Activation('relu'))
model.add(Convolution2D(nb_filters, nb_conv, nb_conv))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(nb_pool, nb_pool)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(nb_classes))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adadelta')
model.fit(X_train, Y_train, batch_size=batch_size, nb_epoch=nb_epoch,
show_accuracy=True, verbose=1, validation_data=(X_test, Y_test))
score = model.evaluate(X_test, Y_test, show_accuracy=True, verbose=0)
print('Test score:', score[0])
print('Test accuracy:', score[1])
5. 如何切换Keras后端backend?
创建或打开如下Keras配置文件:
~/.keras/keras.json
默认配置如下:
{
“image_dim_ordering”:”tf”,
“Epsilon”:1e-07,
“floatx”:”float32”,
“backend”:tensorflow”
}
将backend字段的值改为theano或者tensorflow,即可切换到相应的后端。
6. 如何使Keras调用GPU?
如果采用TensorFlow作为后端,当机器上有可用的GPU时,代码会自动调用GPU进行并行计算。如果使用Theano作为后端,可以通过以下方法设置:
方法1:使用Theano标记,在执行python脚本时使用下面的命令:
THEANO_FLAGS=device=gpu,floatX=float32python my_keras_script.py
方法2:在代码的开头处手动设置theano.config.device 和 theano.config.floatX
import theano
theano.config.device= 'gpu'
theano.config.floatX= 'float32'
参考资料:《Keras中文手册》