4 min read

[box type=”note” align=”” class=”” width=””]The following excerpt is from the title Deep Learning with Theano, Chapter 5 written by Christopher Bourez. The book offers a complete overview of Deep Learning with Theano, a Python-based library that makes optimizing numerical expressions and deep learning models easy on CPU or GPU. [/box]

In this article, we introduce you to the highly popular deep learning library – Keras, which sits on top of the both, Theano and Tensorflow. It is a flexible platform for training deep learning models with ease.

Keras is a high-level neural network API, written in Python and capable of running on top of either TensorFlow or Theano. It was developed to make implementing deep learning models as fast and easy as possible for research and development. You can install Keras easily using conda, as follows:
conda install keras

When writing your Python code, importing Keras will tell you which backend is used:

>>> import keras

Using Theano backend.

Using cuDNN version 5110 on context None

Preallocating 10867/11439 Mb (0.950000) on cuda0

Mapped name None to device cuda0: Tesla K80 (0000:83:00.0)

Mapped name dev0 to device cuda0: Tesla K80 (0000:83:00.0)

Using cuDNN version 5110 on context dev1

Preallocating 10867/11439 Mb (0.950000) on cuda1

Mapped name dev1 to device cuda1: Tesla K80 (0000:84:00.0)

If you have installed Tensorflow, it might not use Theano. To specify which backend

to use, write a Keras configuration file, ~/.keras/keras.json:

{

"epsilon": 1e-07,

"floatx": "float32",

"image_data_format": "channels_last",

"backend": "theano"

}

It is also possible to specify the Theano backend directly with the environment Variable:

KERAS_BACKEND=theano python

Note that the device used is the device we specified for Theano in the ~/.theanorc file. It is also possible to modify these variables with Theano environment variables:

KERAS_BACKEND=theano THEANO_FLAGS=device=cuda,floatX=float32,mode=FAST_

RUN python

Programming with Keras

Keras provides a set of methods for data pre-processing and for building models. Layers and models are callable functions on tensors and return tensors. In Keras, there is no difference between a layer/module and a model: a model can be part of a bigger model and composed of multiple layers. Such a sub-model behaves as a module, with inputs/outputs.

Let’s create a network with two linear layers, a ReLU non-linearity in between, and a softmax output:

from keras.layers import Input, Dense

from keras.models import Model
inputs = Input(shape=(784,))
x = Dense(64, activation='relu')(inputs)

predictions = Dense(10, activation='softmax')(x)

model = Model(inputs=inputs, outputs=predictions)

The model module contains methods to get input and output shape for either one or multiple inputs/outputs, and list the submodules of our module:

>>> model.input_shape

(None, 784)

>>> model.get_input_shape_at(0)

(None, 784)


>>> model.output_shape

(None, 10)


>>> model.get_output_shape_at(0)

(None, 10)


>>> model.name

'Sequential_1'


>>> model.input

/dense_3_input


>>> model.output

Softmax.0


>>> model.get_output_at(0)

Softmax.0


>>> model.layers

[<keras.layers.core.Dense object at 0x7f0abf7d6a90>, <keras.layers.core.Dense object at 0x7f0abf74af90>]

In order to avoid specify inputs to every layer, Keras proposes a functional way of writing models with the Sequential module, to build a new module or model composed.

The following definition of the model builds exactly the same model as shown previously, with input_dim to specify the input dimension of the block that would be unknown otherwise and generate an error:

from keras.models import Sequential

from keras.layers import Dense, Activation

model = Sequential()

model.add(Dense(units=64, input_dim=784, activation='relu'))

model.add(Dense(units=10, activation='softmax'))

The model is considered a module or layer that can be part of a bigger model:

model2 = Sequential()

model2.add(model)

model2.add(Dense(units=10, activation='softmax'))

Each module/model/layer can be compiled then and trained with data :

model.compile(optimizer='rmsprop',

loss='categorical_crossentropy',

metrics=['accuracy'])

model.fit(data, labels)

Thus, we see it is fairly easy to train a model in Keras. The simplicity and ease of use that Keras offers makes it a very popular choice of tool for deep learning.

If you think the article is useful, check out the book Deep Learning with Theano for interesting deep learning concepts and their implementation using Theano.

For more information on the Keras library and how to train efficient deep learning models, make sure to check our highly popular title Deep Learning with Keras.

 

Data Science Enthusiast. A massive science fiction and Manchester United fan. Loves to read, write and listen to music.

LEAVE A REPLY

Please enter your comment!
Please enter your name here