The common error in tensorflow is ‘**Modulenotfounderror no module named tensorflow.keras**‘, In this tutorial, I will explain different approaches to resolving this error.

Additionally, you will see different kinds of errors related to this error and learn how to resolve those errors, too.

These are **Modulenotfounderror no module named ‘tensorflow.keras.engine’** and **Modulenotfounderror no module named ‘tensorflow.keras.layers.merge’.**

By the end of this tutorial, you can handle these errors very smoothly.

I’ll be covering the following topics:

- Modulenotfounderror no module named tensorflow Keras
- Modulenotfounderror no module named ‘tensorflow.keras.layers.experimental.preprocessing’
- Modulenotfounderror no module named ‘tensorflow.keras.engine’
- Modulenotfounderror no module named ‘tensorflow.keras.layers.merge’
- Modulenotfounderror: No Module Named ‘tensorflow.keras.wrappers’

## Modulenotfounderror no module named tensorflow Keras

First, you must know what the error **Modulenotfounderror no module named tensorflow.keras** means.

It means Python doesn’t find the submodule named **keras of the TensorFlow** library; there can be several reasons for this error.

The first mistake you can make is importing the module incorrectly if you type something like the command below.

`import tensorflow.Keras`

You get the error **Modulenotfounderror no module named tensorflow Keras** because you specify something like this **‘tensorflow.Keras’** while importing the Keras module, but here in Keras, the k should be small like this **tensorflow.keras.**

So, the complete fix for that error is given below.

`import tensorflow.keras`

Executing the above doesn’t show an error and imports the module keras from the TensorFlow in your environment.

The second mistake can be different versions of TensorFlow and Keras; if you use an old version of TensorFlow, like 1.1 or below, you may have to install Keras, too.

So, for example, if you use TensorFlow 1 and the Karas version is 1.1, you will get an error ‘**no module named tensorflow Keras**‘.

Here, you need to keep the same version of TensorFlow and Keras. But remember, after Keras, version 2.0 has become part of tensorflow since version tf=2.0.

This means you don’t need to install or access the Keras separately when you install TensorFlow, as shown below.

```
import keras
model = keras.Sequential()
```

But if you are using the latest version of TensorFlow, like above 2.0, then you can follow the below procedure to access the Keras and define the model.

So, when importing the module, make sure you are using correct typos and spelling.

Let’s create a simple model using the keras module.

```
import tensorflow as tf
from tensorflow.keras import layers
new_model = tf.keras.Sequential(
[
layers.Dense(3, activation="relu", name="layer1"),
layers.Dense(1, activation="relu", name="layer2"),
layers.Dense(2, name="layer3"),
]
)
tens_1 = tf.ones((3, 3))
tens_2 = new_model(tens_1)
new_model.summary()
```

Look, **new_model** is created using the **tensorflow.keras module; **especially using this model, you can create or define neural networks or deep learning models in TensorFlow.

A third mistake is importing the Keras module from TensorFlow on an old version of TensorFlow, like **tensorflow==1.14.0**, so make sure you have installed the latest version of TensorFlow.

There is another form of this error is **modulenotfounderror: no module named ‘tensorflow.keras’; ‘tensorflow’ is not a package**, so apply the above approach.

To ensure you have installed the latest version of Tensorflo

Read: Attributeerror: module ‘tensorflow’ has no attribute ‘scalar_summary’

## Modulenotfounderror no module named ‘tensorflow.keras.engine’

You get this error because you are trying to access the internal component of Keras directly. Also, there is no submodule named tensorflow.keras.engine.

So execute; you get that error when you execute the code below.

`import tensorflow.keras.engine`

You get that error because all the submodules under **keras.engine** are moved to different modules onwards tensorflow 2.xxx.

The solution to the above error is given below in the code.

```
from tensorflow.keras.layers import Layer, InputSpec
result= tf.keras.layers.InputSpec(dtype=None, shape=(2,2),ndim=None)
print(result)
```

## Modulenotfounderror no module named ‘tensorflow.keras.layers.merge’

First, the error means no module named **keras.layers.merge** in the latest version of TensorFlow.

The purpose of this **keras.layers.merge** is converting the multiple layers into single, which means multidimensional tensors are converted into single tensors.

In convolution, 3D layers are converted into 1D layers, reducing memory. Also, the model works best on the 1D layers or 1D tensors.

Let me show you the possible way you get this error when you import it, as shown below.

`from tensorflow.keras.layers.merge import concatenate`

So, I have the following two approaches to resolve this error.

The first approach is to import the **concatenate** from the **tensorflow.layers** instead of **tensorflow.layers.merge** as shown below.

```
from tensorflow.keras.layers import concatenate
print(concatenate)
```

Look at the picture: The concatenate was successfully imported from the module **tensorflow.keras.layers**.

The second approach is about using the keras framework directly, so use the command below to import the **concatenate** from **keras.layers.**

```
from keras.layers import concatenate
print(concatenate)
```

The approach depends on you; using tensorflow, use the first approach; otherwise, the second would be best.

Now, I will show a complete example of using **concatenate()** from the **tensorflow.keras.layers.** In this example, you will use the** tf.keras.layers.concatenate() **function to concatenate two input layers.

**Syntax**:

Let’s look at the syntax and understand how to use the **tf.keras.layers.concatenate()** function in TensorFlow.

```
tf.keras.layers.concatenate(
inputs, axis=-1, **kwargs
)
```

- Where it consists of a few parameter
**inputs**: This parameter defines the list of input tensors.**axis**: By default, it takes a -1 value and defines the concatenation axis.****kwargs**: This parameter indicates the standard layer keyword parameters.

Now, test with an example.

```
import tensorflow as tf
import numpy as np
from keras.layers import concatenate
USA_based_random_num = np.arange(20).reshape(2, 2, 5)
print(USA_based_random_num )
sample_num = np.arange(20, 30).reshape(2, 1, 5)
print(sample_num)
result= tf.keras.layers.concatenate([USA_based_random_num , sample_num],axis=1)
print(result)
```

Here, the above created two input layers, **USA_based_random_num** and **sample_num**. They are not real layers but, for example, considered as layers.

These two layers are now passed to function **concatenate() with axis=1. **Then layers are flattened along axis 1, or, in other words, one array dimension is created from a multi-dimension array.

This is how to resolve the error **Modulenotfounderror no module named ‘tensorflow.keras.layers.merge’**.

Read: How to convert dictionary to tensor tensorflow

### Modulenotfounderror: No Module Named ‘tensorflow.keras.wrappers’

The error **Modulenotfounderror: No Module Named ‘tensorflow.keras.wrappers’** means there are no subpackages called **wrappers** in the submodule **‘tensorflow.keras’.**

I have two approaches to solve this error, which are discussed below.

You get an error because you may import some of the below functions.

```
from tensorflow.keras.wrappers.scikit_learn import KerasRegressor
```

Here, within **tensorflow.keras** accessing the **wrappers.scikit_learn**. This **keras.wrappers** thing doesn’t exist. But if you are using a tensorflow version like **2.15** or above, then the module **keras.wrappers** have been removed, so, normally, you get the error.

If you still want to use it, I suggest you uninstall the current version of Tensorflow and install version 2.15, as shown below.

```
pip uninstall tensorflow
pip install tensorflow==2.12.0
```

Using the above command, uninstall the currently installed tensorflow and install the specific version 2.12.0.

As shown below, import the **KerasRegressor **from the **tensorflow.keras.wrappers.scikit_learn.**

```
from tensorflow.keras.wrappers.scikit_learn import KerasRegressor
print(KerasRegressor)
```

So, an alternative approach is to install the **scikeras** package and then import KerasRegressor or KerasClassifier, etc.

Follow the steps below to install the package.

`!pip install scikeras`

Then again, use the import statement as shown below.

```
from scikeras.wrappers import KerasRegressor
print(KerasRegressor)
```

Look, I successfully imported the **KerasRegressor** from the scikeras. It depends on which approach you adopt.

## Conclusion

This tensorflow tutorial taught you about different solutions to the error ‘**Modulenotfounderror no module named tensorflow.keras**‘,

Additionally, you learned how to solve these errors **Modulenotfounderror no module named ‘tensorflow.keras.engine’** and **Modulenotfounderror no module named ‘tensorflow.keras.layers.merge’.**

Also, take a look at some more Python TensorFlow tutorials.

- Module ‘tensorflow’ has no attribute ‘log’
- TensorFlow Fully Connected Layer
- Batch Normalization TensorFlow

I am Bijay Kumar, a Microsoft MVP in SharePoint. Apart from SharePoint, I started working on Python, Machine learning, and artificial intelligence for the last 5 years. During this time I got expertise in various Python libraries also like Tkinter, Pandas, NumPy, Turtle, Django, Matplotlib, Tensorflow, Scipy, Scikit-Learn, etc… for various clients in the United States, Canada, the United Kingdom, Australia, New Zealand, etc. Check out my profile.