导入错误:无法从'keras.optimizers'中导入名称为'adam'的模块

71

我正在尝试导入Keras,但是遇到了以下错误:

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

这里调用了该导入:

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

我确定Keras已经与Tensorflow一起安装:

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

3
是“Adam”,需要大写,不是“adam”。 - Dr. Snoopy
11个回答

132

有两种类型的模块 -

  1. keras
  2. tensorflow.keras

这里我们需要使用 tensorflow.keras

您需要从 tensorflow 中导入 Adam(大写 A)- Keras(不仅仅是 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

31

最近,在Keras API 2.5.0的最新更新中,导入Adam优化器会显示以下错误:

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

请改用以下方式导入优化器(例如Adam):

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

如需更多详细信息,请查看:https://programmerah.com/keras-nightly-import-package-error-cannot-import-name-adam-from-keras-optimizers-29815/

希望这有所帮助。


很高兴这个答案能帮助到这里的许多人。 - ALI Q SAEED

24

从 tensorflow.keras.optimizers 导入 Adam

尝试在第四行使用这个代码(或者只需用上面的代码替换它)。对我来说有效。


20

您有两个选择:

  1. 使用tensorflow

    from tensorflow.keras.optimizers import Adam

这可能会导致您需要将其他keras.*模块更改为tensorflow.kerar.*模块。

  1. 继续使用keras

    from keras.optimizers_v1 import Adam

Adam已转移到optimizer_v1模块中。


当我使用from keras.optimizers_v1中的优化器时,它明确告诉我要使用tf.keras.optimizers。完整的错误跟踪如下:ValueError: 当启用了即时执行时,不支持tf.compat.v1.keras优化器(<keras.optimizer_v1.Adam object at 0x0000022A4D403048>)。请改用tf.keras优化器,或禁用即时执行。 - undefined

9
错误来自于旧版的keras,在新版本中,你不需要导入Adam,可以使用引号指定,例如:
model.compile(optimizer= "adam", loss='mse', metrics=[psnr, "accuracy"])

2
如果你想要更多的选择,比如:model.compile(optimizer=keras.optimizers.Adam(lr=0.001, decay=0.9), loss='mse', metrics=[get_rmse]) - Yuchao Jiang
抛出错误 ValueError: 无法解释优化器标识符:<tensorflow.python.keras.optimizer_v2.adam.Adam object at 0x000001F91A8BA820> - Adi

7
在第四行中,只需编写from keras.optimizers import Adam。它应该完美地工作!

10
无法运行。 无法从'keras.optimizers'导入'Adam'。 - Adi

6
from keras.optimizer_v2 import adam

然后从adam中调用Adam

adam.Adam(...);

1
非常感谢,我花了一整天的时间解决这个该死的问题!!! - Jing

5
以下方法适用于我:
# importing
from keras.optimizers import adam_v2
# to use it
adam_v2.Adam(...)

我正在运行虚拟环境,使用 Python3.8.7pip 安装的 CPU 版本的 tensorflow-2.6.0


1

我在这个问题上浪费了一整天时间,后来发现只需要:

from tensorflow.python.keras.optimizers import adam_v2

adam_v2.Adam(learning_rate=0.0001, clipnorm=1.0, clipvalue=0.5)

就可以解决问题(我使用的是tensorflow的v2.11.0版本)。

我还发现在tensorflow.python.keras.optimizers中有其他优化器:

'adadelta_v2', 'adagrad_v2', 'adam_v2', 'adamax_v2','nadam_v2','rmsprop_v2',

你可以像下面这样使用:

from tensorflow.python.keras.optimizers import rmsprop_v2

rmsprop_v2.RMSprop(learning_rate=0.0001)


1

我正在使用
名称:Keras 版本:2.8.0

from keras.optimizers import adam_v2

使用Adam优化器(使用tf.keras.optimizers.Adam):

model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.0001), loss='sparse_categorical_crossentropy', metrics=['accuracy'])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接