This post introduces how to install Keras with TensorFlow as backend on Ubuntu Server 16.04 LTS with CUDA 8 and a NVIDIA TITAN X (Pascal) GPU, but it should work for Ubuntu Desktop 16.04 LTS.
We gratefully acknowledge the support of NVIDIA Corporation with awarding one Titan X Pascal GPU used for our machine learning and deep learning based research.
Keras is a great choice to learn machine learning and deep learning. Keras has easy syntax and can use Google TensorFlow or Microsoft CNTK or Theano as its backend. Keras is simply a wrapper around more complex numerical computation engines such as TensorFlow and Theano.
Keras abstracts away much of the complexity of building a deep neural network, leaving us with a very simple, nice, and easy to use interface to rapidly build, test, and deploy deep learning architectures.
TensorFlow is extremely flexible, allowing you to deploy network computation to multiple CPUs, GPUs, servers, or even mobile systems without having to change a single line of code.
This makes TensorFlow an excellent choice for training distributed deep learning networks in an architecture agnostic way.
Now Let’s start on the installation of Keras with TensorFlow as its backend.
1: Setup Python virtual environment
Check my post about more details about how to setup python virtual environment and why it is better to install python libraries in Python virtual environment.
- Install pip and Virtualenv for python and python 3:
$ sudo apt-get update
$ sudo apt-get install openjdk-8-jdk git python-dev python3-dev python-numpy python3-numpy build-essential python-pip python3-pip python-virtualenv swig python-wheel libcurl3-dev
- Create a Virtualenv environment in the directory for python and python 3:
#for python 2
virtualenv --system-site-packages -p python ~/keras-tf-venv
# for python 3
virtualenv --system-site-packages -p python3 ~/keras-tf-venv3
(Note: To delete a virtual environment, just delete its folder. For example, In our cases, it would be rm -rf keras-tf-venv
or rm -rf keras-tf-venv3
.)
2: Update & Install NVIDIA Drivers (skip this if you do not need to TensorFlow GPU version)
Check another post I wrote(steps 1-4 in that post) for detailed instructions about how to update and install NVIDIA Drive and CUDA 8.0 and cuDNN for the requirements of GPU TensorFlow installation.
Notes: If you have old version of NVIDIA driver installed used the following to remove it first before installation of new driver.
Step 1: Remove older version of NVIDIA
sudo apt-get purge nvidia*
Step 2: Reboot the system
test whesther it is removed
$ sudo nvidia-smi
$ sudo: nvidia-smi: command not found # this means the old driver was uninstalled.

(Note: If you have older version of CUDA and cuDNN installed, check the post for uninstallation. How to uninstall CUDA Toolkit and cuDNN under Linux? (02/16/2017) (pdf). Actually to uninstall (older version) of CUDA, it tells you how to uninstall it when you install, see the Install cuda 8.0 below.)
(Note: I tried to install the latest Nvidia drive, latest cuda and latest cudnn (i.e., v6.0), but it did not work for me when I installed TensorFlow. After a few testing, I found when I install Nvidia drive 375.82, cuda_8.0.61_375.26_linux.run, cudnn-8.0-linux-x64-v5.1.tgz. it works.)
Install cuda 8.0:
Toolkit: Installed in /usr/local/cuda-8.0
Samples: Installed in /home/liping, but missing recommended libraries
Please make sure that
– PATH includes /usr/local/cuda-8.0/bin
– LD_LIBRARY_PATH includes /usr/local/cuda-8.0/lib64, or, add /usr/local/cuda-8.0/lib64 to /etc/ld.so.conf and run ldconfig as root
To uninstall the CUDA Toolkit, run the uninstall script in /usr/local/cuda-8.0/bin
Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-8.0/doc/pdf for detailed information on setting up CUDA.
***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 361.00 is required for CUDA 8.0 functionality to work.
To install the driver using this installer, run the following command, replacing <CudaInstaller> with the name of this run file:
sudo <CudaInstaller>.run -silent -driver
Logfile is /tmp/cuda_install_3813.log
3: Install TensorFlow
Before installing TensorFlow and Keras, be sure to activate your python virtual environment first.
# for python 2
$ source ~/keras-tf-venv/bin/activate # If using bash
(keras-tf-venv)$ # Your prompt should change
# for python 3
$ source ~/keras-tf-venv3/bin/activate # If using bash
(keras-tf-venv3)$ # Your prompt should change
(keras-tf-venv)$ pip install --upgrade tensorflow # Python 2.7; CPU support (no GPU support)
(keras-tf-venv3)$ pip3 install --upgrade tensorflow # Python 3.n; CPU support (no GPU support)
(keras-tf-venv)$ pip install --upgrade tensorflow-gpu # Python 2.7; GPU support
(keras-tf-venv3)$ pip3 install --upgrade tensorflow-gpu # Python 3.n; GPU support
Note: If the commands for installing TensorFlow given above failed (typically because you invoked a pip version lower than 8.1), install TensorFlow in the active virtualenv environment by issuing a command of the following format:
(keras-tf-venv)$ pip install --upgrade TF_PYTHON_URL # Python 2.7
(keras-tf-venv3)$ pip3 install --upgrade TF_PYTHON_URL # Python 3.N
where TF_PYTHON_URL
identifies the URL of the TensorFlow Python package. The appropriate value of TF_PYTHON_URL
depends on the operating system, Python version, and GPU support. Find the appropriate value for TF_PYTHON_URL
for your system here. For example, if you are installing TensorFlow for Linux, Python 2.7, and CPU-only support, issue the following command to install TensorFlow in the active virtualenv environment: (see below for examples. Note that check here to get the latest version for your system.)
#for python 2.7 -- CPU only
(keras-tf-venv)$pip install --upgrade \ https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.1.0-cp27-none-linux_x86_64.whl
#for python 2.7 -- GPU support
(keras-tf-venv)$pip install --upgrade \ https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.1.0-cp27-none-linux_x86_64.whl
# for python 3.5 -- CPU only
(keras-tf-venv3)$ pip3 install --upgrade \
https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.1.0-cp35-cp35m-linux_x86_64.whl
# for python 3.5 -- GPU support
(keras-tf-venv3)$ pip3 install --upgrade \
https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.1.0-cp35-cp35m-linux_x86_64.whl
- Validate your TensorFlow installation. (as I just installed GPU tensorflow, so if you install CPU TensorFlow, the output might be slightly different.)
#For Python 2.7
(keras-tf-venv) :~$ python
Python 2.7.12 (default, Nov 19 2016, 06:48:10)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
2017-08-01 14:28:31.257054: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these are available on your machine and could speed up CPU computations.
2017-08-01 14:28:31.257090: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.
2017-08-01 14:28:31.257103: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
2017-08-01 14:28:31.257114: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX2 instructions, but these are available on your machine and could speed up CPU computations.
2017-08-01 14:28:31.257128: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use FMA instructions, but these are available on your machine and could speed up CPU computations.
2017-08-01 14:28:32.253475: I tensorflow/core/common_runtime/gpu/gpu_device.cc:940] Found device 0 with properties:
name: TITAN X (Pascal)
major: 6 minor: 1 memoryClockRate (GHz) 1.531
pciBusID 0000:03:00.0
Total memory: 11.90GiB
Free memory: 11.75GiB
2017-08-01 14:28:32.253512: I tensorflow/core/common_runtime/gpu/gpu_device.cc:961] DMA: 0
2017-08-01 14:28:32.253519: I tensorflow/core/common_runtime/gpu/gpu_device.cc:971] 0: Y
2017-08-01 14:28:32.253533: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Creating TensorFlow device (/gpu:0) -> (device: 0, name: TITAN X (Pascal), pci bus id: 0000:03:00.0)
>>> print(sess.run(hello))
Hello, TensorFlow!
>>> exit()
(keras-tf-venv) :~$
#for python 3
(keras-tf-venv3) :~$ python3
Python 3.5.2 (default, Nov 17 2016, 17:05:23)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
2017-08-01 13:54:30.458376: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these are available on your machine and could speed up CPU computations.
2017-08-01 13:54:30.458413: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.
2017-08-01 13:54:30.458425: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
2017-08-01 13:54:30.458436: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX2 instructions, but these are available on your machine and could speed up CPU computations.
2017-08-01 13:54:30.458448: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use FMA instructions, but these are available on your machine and could speed up CPU computations.
2017-08-01 13:54:31.420661: I tensorflow/core/common_runtime/gpu/gpu_device.cc:940] Found device 0 with properties:
name: TITAN X (Pascal)
major: 6 minor: 1 memoryClockRate (GHz) 1.531
pciBusID 0000:03:00.0
Total memory: 11.90GiB
Free memory: 11.75GiB
2017-08-01 13:54:31.420692: I tensorflow/core/common_runtime/gpu/gpu_device.cc:961] DMA: 0
2017-08-01 13:54:31.420699: I tensorflow/core/common_runtime/gpu/gpu_device.cc:971] 0: Y
2017-08-01 13:54:31.420712: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Creating TensorFlow device (/gpu:0) -> (device: 0, name: TITAN X (Pascal), pci bus id: 0000:03:00.0)
>>> print(sess.run(hello))
b'Hello, TensorFlow!'
>>> exit()
(keras-tf-venv3) :~$
If you see the output as below, it indicates your TensorFlow was installed correctly.
Hello, TensorFlow!
3: Install Keras
(Note: Be sure that you activated your python virtual environment before you install Keras.)
Installing Keras is even easier than installing TensorFlow.
First, let’s install a few dependencies:
#for python 2
$ pip install numpy scipy
$ pip install scikit-learn
$ pip install pillow
$ pip install h5py
#for python 3
$ pip3 install numpy scipy
$ pip3 install scikit-learn
$ pip3 install pillow
$ pip3 install h5py
Install keras:
$ pip install keras #for python 2
$ pip3 install keras # for python 3
Keras is now installed on your Ubuntu 16.04.
4: Verify that your keras.json file is configured correctly
Let’s now check the contents of our keras.json configuration file. You can find this file at ~/.keras/keras.json .
use nano to open and edit the file.
$ nano ~/.keras/keras.json
The default values should be something like this:
{
"epsilon": 1e-07,
"backend": "tensorflow",
"floatx": "float32",
"image_data_format": "channels_last"
}
Can’t find your keras.json file?
On most systems the keras.json file (and associated subdirectories) will not be created until you open up a Python shell and directly import the keras package itself.
If you find that the ~/.keras/keras.json file does not exist on your system, simply open up a shell, (optionally) access your Python virtual environment (if you are using virtual environments), and then import Keras:
#for python 2
$ python
>>> import keras
>>> quit()
#for python 3
$ python3
>>> import keras
>>> quit()
From there, you should see that your keras.json file now exists on your local disk.
If you see any errors when importing keras go back to the top of step 4 and ensure your keras.json configuration file has been properly updated.
5: Test Keras + TensorFlow installation
To verify that Keras + TensorFlow have been installed, simply access the keras_tf environment using the workon command, open up a Python shell, and import keras :

Specifically, you can see the text Using TensorFlow backend display when importing Keras — this successfully demonstrates that Keras has been installed with the TensorFlow backend.
Note: each time you would like to use Keras, you need to activate the virtual environment into which it installed, and when you are done using Keras, deactivate the environment.
# for python 2
(keras-tf-venv)$ deactivate
$ # Your prompt should change back
#for python 3
(keras-tf-venv3)$ deactivate
$ # Your prompt should change back
Note: To delete a virtual environment, just delete its folder. (In this case, it would be rm -rf keras-tf-venv
or rm -rf keras-tf-venv3
.)
References:
Installing Nvidia, Cuda, CuDNN, TensorFlow and Keras
https://www.tensorflow.org/install/install_linux
Keras as a simplified interface to TensorFlow: tutorial
I: Calling Keras layers on TensorFlow tensors
II: Using Keras models with TensorFlow
III: Multi-GPU and distributed training
IV: Exporting a model with TensorFlow-serving