基于Keras的深度学习实战总结

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中文手册》

点击打开链接

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页