'ImportError: cannot import name 'adam' from 'keras.optimizers'

I am trying to import Keras but I get the following error:

ImportError: cannot import name 'adam' from 'keras.optimizers' (/usr/local/lib/python3.8/dist-packages/keras/optimizers/__init__.py)

The import is invoked here:

from tensorflow import keras
from keras.layers import Conv2D, Input, MaxPool2D,Flatten, Dense, Permute, GlobalAveragePooling2D
from keras.models import Model
from keras.optimizers import adam
import numpy as np
import pickle
import keras
import cv2
import sys
import dlib
import os.path
from keras.models import Sequential
from keras.applications.resnet50 import ResNet50
from keras.applications.resnet50 import Dense
from keras.optimizers import Adam
import pickle
import numpy as np
import cv2
import os
from keras.layers import Dropout

I am sure Keras is installed along with Tensorflow:

python3 -c 'import keras; print(keras.__version__)' // 2.4.3


Solution 1:[1]

There are two types of modules -

  1. keras
  2. tensorflow.keras

Here we need to use tensorflow.keras

You need to import Adam (With Capital A) from tensorflow - Keras ( Not only Keras).

from tensorflow.keras.optimizers import Adam

from tensorflow.keras.optimizers import Adam # - Works
from tensorflow.keras.optimizers import adam # - Does not work
from keras.optimizers import Adam            # - Does not work
from keras.optimizers import adam            # - Does not work

Solution 2:[2]

recently, in the latest update of Keras API 2.5.0 , importing Adam optimizer shows the following error:

from keras.optimizers import Adam
ImportError: cannot import name 'Adam' from 'keras.optimizers' 

instead use the following for importing optimizers (i.e. Adam) :

from keras.optimizers import adam_v2
optimizer = adam_v2.Adam(learning_rate=lr, decay=lr/epochs)
Model.compile(loss='--',  optimizer=optimizer  , metrics=['--'])

for more details, please have a look at : https://programmerah.com/keras-nightly-import-package-error-cannot-import-name-adam-from-keras-optimizers-29815/

hopefully, this helps.

Solution 3:[3]

from tensorflow.keras.optimizers import Adam

Try this in the 4th line(or just replace it with the above line). It worked for me.

Solution 4:[4]

You can do two things:

  1. Go with tensorflow

    from tensorflow.keras.optimizers import Adam

This might cause you to change other keras.* modules to tensorflow.kerar.* modules.

  1. Stay at keras

    from keras.optimizers_v1 import Adam

Adam has been shifted to optimizer_v1 module.

Solution 5:[5]

The error came from an older version of keras, in the newer version, you don't have to import Adam, it can be specified using the quote, i.e.:

model.compile(optimizer= "adam", loss='mse', metrics=[psnr, "accuracy"])

Solution 6:[6]

In the fourth line, just make from keras.optimizers import Adam. It should work perfectly fine!

Solution 7:[7]

from keras.optimizer_v2 import adam

#then call Adam from adam

adam.Adam(...);

Solution 8:[8]

The following worked for me:

# importing
from keras.optimizers import adam_v2
# to use it
adam_v2.Adam(...)

I am on a virtual environment running tensorflow-2.6.0 (CPU version, pip installed) with Python3.8.7.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Aaditya Ura
Solution 2 ALI Q SAEED
Solution 3 Saptarshi Basu
Solution 4 Miguel Conde
Solution 5 Yuchao Jiang
Solution 6 Daniel Walker
Solution 7 Alihdr
Solution 8