Installing Keras with TensorFlow backend

A few months ago I demonstrated how to install the Keras deep learning library with a Theano backend.

In today’s blog post I provide detailed, step-by-step instructions to install Keras using a TensorFlow backend, originally developed by the researchers and engineers on the Google Brain Team.

I’ll also (optionally) demonstrate how you can integrate OpenCV into this setup for a full-fledged computer vision + deep learning development environment.

To learn more, just keep reading.

Installing Keras with TensorFlow backend

The first part of this blog post provides a short discussion of Keras backends and why we should (or should not) care which one we are using.

From there I provide detailed instructions that you can use to install Keras with a TensorFlow backend for machine learning on your own system.

TensorFlow? Theano? Who cares?

It’s important to start this discussion by saying that 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.

When it comes to Keras you have two choices for a backend engine — either TensorFlow or Theano. Theano is older than TensorFlow and was originally the only choice when selecting a backend for Keras.

So why might you want to use TensorFlow over a different backend (such as the no-longer-being-developed Theano)?

The short version is that 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, something that Theano does not (currently) provide.

To be totally honest with you, I started using Keras well before TensorFlow was released (or even rumored to exist) — this was back when Theano was the only possible choice of backend.

I haven’t given much thought to whether Theano or TensorFlow should be my “go to” backend. Theano was working well for what I needed it for, so why bother switching?

My eyes started to open when I ran this recent poll on Twitter asking my followers which backend they preferred when using Keras:

Figure 1: I polled my Twitter followers (@pyimagesearch) to determine whether they preferred using Theano or TensorFlow as their Keras backend.

Figure 1: I polled my Twitter followers (@pyimagesearch) to determine whether they preferred using Theano or TensorFlow as their Keras backend.

67% of respondents said they were using TensorFlow as their backend. I was honestly quite surprised. How, as a long-time Keras user, could I possibly be in the minority?

This 67% of respondents might be swayed since TensorFlow is now the default backend when installing Keras…or it could be because many of my followers are finding TensorFlow a better, more efficient backend (and using more TensorFlow specific features).

Regardless of the exact reasoning, there is one thing you cannot dispute: TensorFlow is here to stay.

If you need further proof all you need to do is take a look at this deep learning GitHub activity analysis from François Chollet (creator and maintainer of Keras):

Figure 2: TensorFlow tops the charts as the deep learning library with most GitHub activity.  Keras follows at #2 with Theano all the way at #9.

Figure 2: TensorFlow tops the charts as the deep learning library with most GitHub activity.  Keras follows at #2 with Theano all the way at #9.

As we can see, TensorFlow is topping the charts by a mile (#1) with Theano at #9.

While Keras makes it simple for us to switch backends (all we need to do is install our respective backends and edit a simple JSON configuration file), we still need to be mindful of what the trends are telling us: that TensorFlow will continue to be the preferred Keras backend in the (near) future.

Update 2018-06-04: Theano is no-longer being actively developed (announcement 2017-09-29) and as you guessed it, TensorFlow is now the default.

Step #1: Setup Python virtual environment

If you’ve ever read any of my previous tutorials (whether for OpenCV, CUDA, Keras, etc.) you’ve likely picked up on the fact that I’m a huge fan of using Python virtual environments.

especially recommend Python virtual environments when working in the deep learning ecosystem. Many Python-based deep learning libraries require different versions of various dependencies.

For example, if you wanted to use Keras + Theano together you would need the latest version of Theano (i.e., their latest GitHub commit, which isn’t always the version published on PyPI).

However, if you wanted to try a library such as scikit-theano you would need a previous version of Theano that is not compatible with Keras.

The dependency version issue only compounds as you start to add in other Python libraries, especially deep learning ones (such as TensorFlow), which are volatile in their very nature (since deep learning is a fast-moving field with updates and new features being pushed online every day).

The solution?

Use Python virtual environments.

I won’t go into a huge rant on the benefits of Python virtual environments (as I’ve already done that in the first half of this blog post), but the gist is that by using Python virtual environments you can create a separate, sequestered Python environment for each of your projects, ensuring that each Python environment is independent of each other. Doing this allows you to totally and completely avoid the version dependency issue.

I’m going to assume that you have both virtualenv and virtualenvwrapper installed on your system (if not, both are pip-installable and require only a small update to your shell configuration; just follow the links above for more information).

Once you have virtualenv and virtualenvwrapper installed, let’s create a Python 3 virtual environment exclusively for our Keras + TensorFlow-based projects:

I’ll name this virtual environment keras_tf  for Keras + TensorFlow (I also have a virtual environment named keras_th  for Keras + Theano).

Anytime you need to access a given Python virtual environment just use the workon  command:

In this particular case we can access the keras_tf  virtual environment using:

Again, while this is an optional step, I really encourage you to take the time to properly setup your development environment if you are even remotely serious about doing deep learning research, experiments, or development using the Python programming language — while it’s more work upfront, you’ll thank me in the long run.

Step #2: Install TensorFlow

Installing TensorFlow is trivially easy as pip  will do all the heavy lifting for us:

Below you can see a screenshot of TensorFlow being downloaded and installed:

Figure 3: Installing TensorFlow for deep learning via pip into my Python virtual environment.

Assuming your TensorFlow install exited without error you can now test the installation by opening a Python shell and trying to import the tensorflow  package:

Step #3: Install Keras

Installing Keras is even easier than installing TensorFlow.

First, let’s install a few Python dependencies:

Followed by installing keras  itself:

That’s it! Keras is now installed on your system!

Step #4: Verify that your keras.json file is configured correctly

Before we get too far we should check the contents of our keras.json  configuration file. You can find this file in ~/.keras/keras.json .

Open it using your favorite text editor and take a peak at the contents. The default values should look something like this:

Specifically, you’ll want to ensure that image_data_format  is set to "channels_last"  (indicating that the TensorFlow image dimension ordering is used rather than "channels_first"  for Theano).

You’ll also want to ensure that the backend  is properly set to tensorflow  (rather than theano ). Again, both of these requirements should be satisfied by the default Keras configuration but it doesn’t hurt to double check.

Make any required updates (if any) to your configuration file and then exit your editor.

A quick note on image_data_format

You might be wondering what exactly image_data_format  controls.

Using TensorFlow, images are represented as NumPy arrays with the shape (height, width, depth), where the depth is the number of channels in the image.

However, if you are using Theano, images are instead assumed to be represented as (depth, height, width).

This little nuance is the source of a lot of headaches when using Keras (and a lot of if  statments looking for these particular configurations).

If you are getting strange results when using Keras (or an error message related to the shape of a given tensor) you should:

  1. Check your backend.
  2. Ensure your image dimension ordering matches your backend.

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:

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 this section and ensure your keras.json  configuration file has been properly updated.

Step #5: Sym-link in OpenCV (optional)

This step is entirely optional, but if you have OpenCV installed on your system and would like to access your OpenCV bindings from a Python virtual environment, you first need to sym-link in the  file to the site-packages  directory of your environment.

To do this, first find where your  bindings are located on your system:

You’ll want to look for the global install of OpenCV which is normally in the /usr/local/lib  directory if you built OpenCV from source (unless you specified a custom OpenCV install directory).

Note: The other  files returned by my find  command are simply sym-links back to the original  file in /usr/local/lib .

From there, change directory into the site-packages  directory of your Python virtual environment (in this case the keras_tf  environment) and create the sym-link:

Again, this step is totally optional and only needs to be done if you want to have access to OpenCV from inside the keras_tf  virtual environment.

Step #6: Test out the 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.

Provided you performed the optional Step #5 and want to to test out your OpenCV sym-link, try importing your OpenCV bindings as well:

If you get an error message related to OpenCV not being found then you’ll want to double check your sym-link and ensure it is pointing to a valid file.

What’s next?

Figure 4: Learn how to utilize Deep Learning and Convolutional Neural Networks to classify the contents of images inside my book, Deep Learning for Computer Vision with Python.

Figure 4: Learn how to utilize Deep Learning and Convolutional Neural Networks to classify the contents of images inside my book, Deep Learning for Computer Vision with Python.

Now that you have Keras + TensorFlow for deep learning installed on your system the obvious question is:

“What’s next?”

I’m glad you asked.

I would suggest:

Finally, I would also recommend taking a look at my book, Deep Learning for Computer Vision with Python.

Inside the book there are over 900 pages covering: Neural Network fundamentals, practical examples, and state-of-the-art classification and object detection networks.

To learn more about my deep learning book (and grab 3 FREE sample chapters plus the entire table of contents), just click the button below:

Click here to grab your copy of DL4CV!


In today’s blog post I demonstrated how to install the Keras deep learning library using the TensorFlow backend.

When it comes to choosing a backend for Keras you need to consider a few aspects.

The first is the popularity and therefore the probability that a given library will continue to be updated and supported in the future. In this case, TensorFlow wins hands down — it is currently the most popular numerical computation engine in the world used for machine learning and deep learning.

Secondly, you need to consider the functionality of a given library. While Theano is just as easy to use as TensorFlow out-of-the-box (in terms of Keras backends), TensorFlow allows for a more architecture agnostic deployment. By using TensorFlow it becomes possible to train distributed deep learning networks across CPUs, GPUs, and other devices all without having to change a single line of code.

Since Theano development has officially ceased in September 2017, I have fully switched to TensorFlow and I’m not looking back.

If you enjoyed this install tutorial and found it helpful be sure to leave a note in the comments!

And if you would like to receive email updates when new blog posts are published on the PyImageSearch blog, please enter your email address in the form below.

, , ,

78 Responses to Installing Keras with TensorFlow backend

  1. Keith Pridbrey November 14, 2016 at 1:03 pm #

    Thank you, thank you. This post is both eye-opening and helpful.

    • Adrian Rosebrock November 14, 2016 at 2:05 pm #

      Thanks Keith!

  2. manuel November 14, 2016 at 2:44 pm #

    Thank you Adrian!! Now I’m much more prone to try and play around with deep learning!!

  3. Chris Hanning November 14, 2016 at 9:30 pm #

    I’m running OSX 10.11.6 with xcode-8.1 and using pyenv to create virtual environments.
    Creating a python-2.7.12 virtual environment with
    pyenv virtualenv 2.7.12 keras_tf
    mkdir keras_tf; cd keras_tf; pyenv local keras_tf
    pip install –upgrade $TF_BINARY_URL
    (and confirming that $TF_BINARY_URL is for mac 2.7 CPU only)
    installs tensorflow without errors but
    keras_tf $ python
    >>> import tensorflow
    fails to import. There is an odd import error to do with a swig-created _pywrap_tensorflow module that it can’t find.

    …some time later… it may have been due to my current default xcode being 8.1
    In the meantime I managed to follow along but using python-3.5.2 instead.
    Here is a link to my opencv3 install workflow for anyone interested:

    • Adrian Rosebrock November 16, 2016 at 1:55 pm #

      Thanks for sharing Chris. I’m not sure about this error message. If you haven’t already, I would suggest opening an Issue on the official TensorFlow/Keras GitHub.

  4. Shravan Kumar Parunandula November 14, 2016 at 10:14 pm #

    You always a rock star… Thanks

    • Adrian Rosebrock November 16, 2016 at 1:53 pm #

      Thank you Shravan 🙂

  5. Kapil November 14, 2016 at 10:38 pm #

    It’s always handy to hear from you.
    Thanks Adrian..!!

    It is my absolute pleasure to learn from your tutorials. Please make tutorials for deep machine learning as you did for OpenCV python…!

    • Adrian Rosebrock November 15, 2016 at 12:48 pm #

      I’ll absolutely continue to do deep learning/machine learning tutorials on the PyImageSearch blog. There are a number of them already that were published within the past 2-3 months. I’ll also be announcing an actual deep learning book in December.

  6. samjakar November 15, 2016 at 2:16 am #

    I am getting started on this right away. Thanks for clear instructions as always.

    Would the following scenario classify for a Machine learning/Neural Net + Computer Vision Combo?
    Programmatically, I need to be able to identify a specific region in a video. Say, for example, the led displays on the perimeter of a Soccer game , or say the Giant overhead LED in a NBA game. Would I be able to achieve this with NN/ML/DL+CV combo? Or would this be just a pure CV effort where NN/ML/DL has probably no role to play? Would you care to share your thoughts?


    • Adrian Rosebrock November 16, 2016 at 1:51 pm #

      I could traditional computer vision + machine learning along with deep learning being used to solve this problem. I think either would work, it mainly just depends if your camera is static or if you’ll be capturing images from a large variety of viewing angles.

      Keep in mind that DL methods require a lot of training data so regardless of which way you go, make sure you collect a lot of data to work with.

  7. Haydar November 15, 2016 at 7:30 am #

    It’s a very helpful topic. Thank you Adrian.

  8. Mike November 15, 2016 at 1:30 pm #

    The only problem with TF is its installation on windows that its quite nontrivial unlike the Theanos one.

    • Adrian Rosebrock November 15, 2016 at 2:04 pm #

      I haven’t used Windows in a very long time — that’s good to know. My biggest complaint with TensorFlow is that it allocates the entire GPU memory to the process that spawned it rather than only allocating the necessary GPU memory like Theano does.

  9. Anastasios Tsiolakidis November 17, 2016 at 10:03 am #

    Thanks for the guide again, you could rearrange something to indicate that ~/.keras/keras.json is not there until your first “import keras”

  10. CK December 3, 2016 at 5:58 pm #

    Guys, there is a pecularity regarding installing TF version > 0.10 with keras.
    You have to set image_dim_ordering in keras.json to “th” even though you are using TF!
    Caused me immense headache while setting up TF on AWS.

    • Adrian Rosebrock December 5, 2016 at 1:33 pm #

      Hey CK — I just spun up an AWS instance three days ago and didn’t run into this particular issue. I’ll be sure to make note of it though.

  11. Samantha Adams December 4, 2016 at 7:47 am #

    Great tutorial! Love the stuff you have been doing with Deep Learning!

    Just to add that I had a problem using virtualenv for some reason – scipy did not install properly. but using anaconda and an conda environment worked perfectly so that is a viable alternative.

  12. Vasilis December 20, 2016 at 5:05 pm #

    You are the best !!!
    I want to ask your advice if tensorflow and keras are optimal solutions for a face recogntion ?
    I also have a small dataset for retraining

    thanks !!!

    • Adrian Rosebrock December 21, 2016 at 10:22 am #

      In reality, it depends. For some datasets you can get away with Eigenfaces, Fisherfaces, or LBPs for face recognition. More advanced solutions should use OpenFace directly instead of trying to code a custom face recognition network.

  13. Khairul Izwan December 27, 2016 at 10:05 pm #

    If I am already had the virtual environment for OpenCV, can I just install/use the keras in it?

    • Adrian Rosebrock December 31, 2016 at 1:32 pm #

      Yes, you can certainly use a pre-existing virtual environment provided there aren’t any package conflicts. If your previous one was just for OpenCV I don’t expect there to be any.

  14. zauron December 30, 2016 at 2:56 am #

    Thanks for the guide Adrian!

    I managed to configure keras (keras.json) depending on virtualenv, this manner I can use keras with Theano or Tensorflow via virtualenv.

    If somebody is interested, just change in “~/.virtualenvs//lib/python2.7/site-packages/keras/backend” this line:

    _keras_base_dir = os.path.expanduser(‘~’)


    if hasattr(sys, ‘real_prefix’):
    _keras_base_dir = sys.prefix
    _keras_base_dir = os.path.expanduser(‘~’)

    This use “.keras/keras.json” inside the virtualenv dir

    • Adrian Rosebrock December 31, 2016 at 1:21 pm #

      Awesome, thanks for sharing Zauron!

  15. Wonchul Kim January 6, 2017 at 3:45 pm #

    First of all, this post was really helpful to install keras with tensorflow!!

    I have a question!
    Now, I installed keras with tensorflow and theano.
    And starting “workon keras_th”, when I import keras in python, this worked as theano backend, eventhough I implemented it on ‘keras_tf’.

    Do I need to change the kears.json file setting?
    If I have to, why do we use virtualenv?

    I thought by using virtualenv, when i execute ‘keras_tf’ and import keras, it works as tensorflow backend, and when i execute ‘keras_th’ and import keras, it works as theano backend .

    • Adrian Rosebrock January 7, 2017 at 9:29 am #

      You use virtual environments so you don’t have conflicting library versions. However, since Keras relies on configurations outside the virtual environment you will need to update your keras.json file if you want to switch between Theano and TensorFlow.

      An alternative would be to create a hook that automatically swaps your keras.json file when you run the workon command.

  16. Wonchul Kim January 6, 2017 at 4:13 pm #

    I’ve followed your post and completed to install keras with tensorflow.

    But, after I closed the terminal and start a new one.

    then, I tried to use ‘workon keras_tf’, but it said ‘workon: command not found’….

    Is there something I have to do before using it?

    • Adrian Rosebrock January 7, 2017 at 9:28 am #

      It sounds like your ~/.bash_profile (or similar profile file) was not updated correctly when you installed virtualenv and virtualenvwrapper. Which operating system are you using?

  17. bernd February 5, 2017 at 1:40 pm #

    Thanks Adrian,
    very helpfull

  18. Raghunandan Palakodety February 15, 2017 at 7:11 am #

    Awesome Adrian!. You give the best tutorials.

    • Adrian Rosebrock February 15, 2017 at 8:57 am #

      Thanks Raghunandan — I’m happy you enjoyed the tutorial!

  19. soumen March 2, 2017 at 10:27 pm #

    hello Adrian,

    I have already installed GPU support TensorFlow in my system in docker. I can use tf in jupyter notebook. Do I need to install tf in my virtual environment again?

    • Adrian Rosebrock March 4, 2017 at 9:42 am #

      Yes, each virtual environment is 100% independent from your system install — that is the way virtual environments are designed to avoid library versioning issues. Simply install TensorFlow into your virtual environment.

  20. soumen March 2, 2017 at 10:47 pm #

    Hello Adrian, in my case, after installation of keras I can see the file ~/.keras/keras.json is empty instead of above mentioned default content. Is there anything wrong? I used just onething different from you like I used different TF_BINARY URL for my system ubuntu 16.04 gpu .. Awaiting for your response.

    • Adrian Rosebrock March 4, 2017 at 9:41 am #

      Fire up a Python shell and import the Keras library. This should populate the .json configuration file.

  21. Jason March 6, 2017 at 10:46 am #

    Hi Adrian,

    Very nice post!

    I have a question. Why use tf as the backend and not use it directly? What is the advantage of using keras?

    • Adrian Rosebrock March 6, 2017 at 3:34 pm #

      Keras acts as a wrapper around Theano/TensorFlow and makes it much easier to write code to build CNNs while still retaining the optimizations and speed that Theano and TensorFlow give you.

  22. DJ March 12, 2017 at 3:13 am #

    Hi Adrian,

    Thanks again for your post, very insightful. I am using AWS EC2 (p2.xlarge) to run Keras via Anaconda. I have installed all the correct drivers for the K80 GPU, somehow when I run my model, it’s still defaulting to use the CPU and was wondering if you happen to know if there’s a setting I can use to switch to always use GPU when running the Tensorflow backend?


  23. Parnia March 23, 2017 at 1:33 pm #

    thank you Adrian for this great tutorial

    • Adrian Rosebrock March 25, 2017 at 9:33 am #

      Thanks for the comment Parnia, I’m happy you enjoyed it! 🙂

  24. Ajay March 25, 2017 at 12:36 pm #

    File “/usr/local/lib/python2.7/dist-packages/keras/backend/”, line 2856, in conv2d
    x = tf.nn.convolution(
    AttributeError: ‘module’ object has no attribute ‘convolution’

    I am getting this error could someone please help me to remove it.

    • Adrian Rosebrock March 28, 2017 at 1:11 pm #

      Which version of Keras are you using? Is it >= 2.0? If so, make sure you install TensorFlow >= 1.0.

      • Balaji March 31, 2017 at 3:16 pm #

        I have the same issue as well.

        File “/usr/local/lib/python2.7/dist-packages/keras/backend/”, line 2856, in conv2d
        x = tf.nn.convolution(
        AttributeError: ‘module’ object has no attribute ‘convolution’

        I m using tensorflow 1.0 and keras 2.02

        • Adrian Rosebrock April 3, 2017 at 2:15 pm #

          Uninstall both tensorflow and protobuf, then re-install TensorFlow ensuring that it’s >= 1.0.

  25. Shashank April 12, 2017 at 1:27 am #

    Hey Adrian!
    I was installing a CPU only version of Tensorflow on Ubuntu 16.04, Python 3.5 running on Virtual Box using the tutorial and I got the following error.
    tensorflow-1.0.1-cp35-cp35m-linux_x86_64.whl is not a supported wheel on this platform.
    Kindly help.
    Thanks in advance

    • Adrian Rosebrock April 12, 2017 at 1:02 pm #

      It’s hard to say what the exact issue is. Make sure you are copying and pasting the full TensorFlow URL correctly.

  26. auraham April 17, 2017 at 12:20 pm #

    Great post, Adrian! For those interested, replace the value of TF_BINARY_URL by

    in order to use Tensorflow 1.0.1 (python 3.5, GPU-enabled). In other case, you will install a previous version (0.11 in this post). This is recommended to use the latest API and avoid conflicts.

    For more options, check this page:

    • Adrian Rosebrock April 19, 2017 at 12:59 pm #

      Thanks for sharing Auraham!

  27. PranavAgarwal May 27, 2017 at 7:18 am #

    How do I install Tensor Flow on my Ubuntu 15.04 32 bit system ,using pip always show error?

    • Adrian Rosebrock May 28, 2017 at 12:58 am #

      What is the error message you are receiving? Without knowing the error, it’s impossible to diagnose the problem.

  28. Surya June 7, 2017 at 5:24 am #

    Thanks Adrian Rosebrock. I just followed the steps and its working fine. I think “image_data_format”: “channels_last” is also correct in addition to the “image_data_format”: “tf”.

    • Adrian Rosebrock June 9, 2017 at 1:52 pm #

      You can use image_data_format as either channels_last or channels_first with Keras 2.0. The difference is that channels_last is faster with TensorFlow and channels_first is faster with Theano.

  29. Alessandro June 13, 2017 at 4:45 pm #


    Great blog and thanks for sharing these info.
    I have a question:

    I have create my virtualenv keras with tensorflow backend with python; when i am trying to use matplotlib I have a problem because it does not work with virtual environment. Do you have any suggestion how to solve this issue?


    • Adrian Rosebrock June 16, 2017 at 11:36 am #

      Hi Alessandro — are you getting an error when trying to use matplotlib from the virtual environment?

      If so, try installing an older version of matplotlib:

      pip install matplotlib==1.4.3

  30. Igor Gallon September 25, 2017 at 7:14 pm #

    Hi Adrian. Is it possible to install Keras+TensorFlow in my Raspberry Pi 3 (raspbian)?

    • Adrian Rosebrock September 26, 2017 at 8:12 am #

      Yes. I would actually suggest following my Deep learning + Ubuntu tutorial. Since both Ubuntu and Raspbian are Debian-based you can use the same instructions.

  31. jeremy rutman January 10, 2018 at 10:48 am #

    in the keras.json file
    can no longer be set to tf, rather one should leave it (or change it) as channels_last like the below, which is actually default it seems.

    “epsilon”: 1e-07,
    “floatx”: “float32”,
    “image_data_format”: “channels_last”,
    “backend”: “tensorflow”

    • Adrian Rosebrock January 10, 2018 at 12:39 pm #

      You’re absolutely right, for the TensorFlow backend in new versions of Keras the image_data_format should now be channels_last.

  32. Cesar February 20, 2018 at 6:28 am #

    Hi Adrian,

    Do I need to repeat the whole process of pip install for every virtual environment that i will create?


    • Adrian Rosebrock February 22, 2018 at 9:15 am #

      Correct, you would need to repeat the pip install process for each new Python virtual environment that you create.

  33. Nihel April 10, 2018 at 5:51 pm #

    Hi Adrian

    File “”, line 22, in
    orig = image.copy()
    AttributeError: ‘NoneType’ object has no attribute ‘copy’

    I am getting this error could someone please help me to remove it.

  34. nabila July 16, 2018 at 4:00 pm #

    I think I’ve successfully got Keras installed by installing from the official keras repo on github. However, I’ve run into another problem where my openCV2 bindings are not being recognized within my keras_tf virtual environment.
    However, it has been added to the site-packages folder:

    pi@raspberrypi:~ $ sudo find . -name ‘**’

    Any suggestions? SO

    • Adrian Rosebrock July 17, 2018 at 7:15 am #

      There are two possibilities here:

      1. You are not in the “keras_tf” Python virtual environment when trying to import OpenCV and Keras
      2. Your “” sym-link from the “keras_tf” virtual environment points to a file that does not exist. Double-check that file path.

  35. Charlie July 27, 2018 at 11:08 am #

    Just wanted to let you know that I followed your instructions for Tensorflow installation, which failed with cryptic errors. I found that the latest version of Tensorflow will not run on my (older) desktop CPU, a Core 2 Quad Q9650. When I forced the installation of (the older) v1.5 of Tensorflow, everything worked.

    I also bought your starter bundle last night. In the introduction summary, you have the sentence “Never in the history of machine learning and neural networks have the available tools at our disposable been so exceptional.” You likely meant to use the word “disposal.”

    In any case, my reading list is full, and thanks for your efforts.

    • Adrian Rosebrock July 31, 2018 at 12:02 pm #

      Hey Charlie — which version of Python + TensorFlow did you originally try to install? Thanks for sharing that downgrading to v1.5 fixed the issue. I’ll also get that typo updated. Thank you for picking up a copy of the Starter Bundle, I hope you are enjoying it so far!

  36. hashir September 27, 2018 at 4:08 am #

    what are the changes should i take to install tensorflow and keras for gpu support

    • Adrian Rosebrock October 8, 2018 at 12:34 pm #

      To install TensorFlow with GPU support you would want to install tensorflow-gpu instead of tensorflow:

      $ pip install --upgrade tensorflow-gpu

  37. Son Vo January 28, 2019 at 10:30 pm #

    Hi Adrian,

    I know this tutorial has been created for more than 2 years. I just wanted to know do you have any tutorial instructing how to deal with problem of Python 3.7.0?
    I did a search and realised that Tensorflow has not supported this version yet. When I followed your tutorial (, the version of 3.7.0 was already installed on my computer. So, is that right if we only have one option to run with Tensorflow: install python 3.6 or lower? If it is, do you have any tutorial demonstrating how to install two versions of Python on the same computer?

    Thanks Adrian very much.


    • Adrian Rosebrock January 29, 2019 at 6:38 am #

      TensorFlow does not (yet) officially support Python 3.7. You either need to:

      1. Downgrade to Python 3.6
      2. Compile TensorFlow from source for Python 3.7 (not recommended)

      I’m publishing a brand new post on installing Keras + TensorFlow on macOS Mojave tomorrow. This post will also show you how to use Python 3.6 instead. Keep an eye out for it!

      • Son Vo January 29, 2019 at 6:44 am #

        Great news! Thanks a lots.

  38. aniruth March 2, 2019 at 3:54 am #

    thank you very much this helped a lot

    • Adrian Rosebrock March 5, 2019 at 9:03 am #

      Thanks Aniruth, I’m glad it helped you!

  39. Gowri March 31, 2019 at 1:20 am #

    Very clear and great work!
    I want to install Keras on my Raspberry pi 3 b+, where the python version is 3.5.4 but keras installation is with 3.6. Whether I have to upgrade python to 3.6?

    • Adrian Rosebrock April 2, 2019 at 6:03 am #

      Keras can work with Python 3.5. Are you saying you want to use Python 3.6 instead?

  40. Gowri April 2, 2019 at 9:19 am #

    I have installed everything as you mentioned above, when I tried to run the program in this blog
    Keras Tutorial: How to get started with Keras, Deep Learning, and Python
    in raspberry pi 3 b+ I got errors like version of python not matching and ration is not matching. What to do? Please help me.

    • Adrian Rosebrock April 4, 2019 at 1:35 pm #

      Can you be a bit more specific? What versions of Keras and TensorFlow did you install on your Pi? What are your specific error messages?

  41. mustafa June 26, 2019 at 5:48 pm #

    1- you are a very great man . thank you for your excellent tutorial .
    2- i need your help :-
    I followed your tutorial until i finished from installing opencv , keras . although these two libraries are correctly imported in the terminal of raspian , i faced an error with keras when i run that imported keras and opencv .

    i need you help alot

    Dear Adrian

    • Adrian Rosebrock July 4, 2019 at 11:00 am #

      Without knowing the error it’s impossible to say what the issue is but you may be forgetting to use the “workon” command to access your Python virtual environment before executing the code.

Before you leave a comment...

Hey, Adrian here, author of the PyImageSearch blog. I'd love to hear from you, but before you submit a comment, please follow these guidelines:

  1. If you have a question, read the comments first. You should also search this page (i.e., ctrl + f) for keywords related to your question. It's likely that I have already addressed your question in the comments.
  2. If you are copying and pasting code/terminal output, please don't. Reviewing another programmers’ code is a very time consuming and tedious task, and due to the volume of emails and contact requests I receive, I simply cannot do it.
  3. Be respectful of the space. I put a lot of my own personal time into creating these free weekly tutorials. On average, each tutorial takes me 15-20 hours to put together. I love offering these guides to you and I take pride in the content I create. Therefore, I will not approve comments that include large code blocks/terminal output as it destroys the formatting of the page. Kindly be respectful of this space.
  4. Be patient. I receive 200+ comments and emails per day. Due to spam, and my desire to personally answer as many questions as I can, I hand moderate all new comments (typically once per week). I try to answer as many questions as I can, but I'm only one person. Please don't be offended if I cannot get to your question
  5. Do you need priority support? Consider purchasing one of my books and courses. I place customer questions and emails in a separate, special priority queue and answer them first. If you are a customer of mine you will receive a guaranteed response from me. If there's any time left over, I focus on the community at large and attempt to answer as many of those questions as I possibly can.

Thank you for keeping these guidelines in mind before submitting your comment.

Leave a Reply