Keras中的"无法解释优化程序标识符"错误

Neh*_*mia 19 python python-3.x keras tensorflow

当我尝试修改Keras中SGD优化器的学习速率参数时出现此错误.我的代码中是否遗漏了某些内容,或者我的Keras安装不正确?

这是我的代码:

from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Dense, Flatten, GlobalAveragePooling2D, Activation
import keras
from keras.optimizers import SGD

model = Sequential()
model.add(Dense(64, kernel_initializer='uniform', input_shape=(10,)))
model.add(Activation('softmax'))
model.compile(loss='mean_squared_error', optimizer=SGD(lr=0.01), metrics= ['accuracy'])*
Run Code Online (Sandbox Code Playgroud)

这是错误信息:

回溯(最近一次调用最后一次):文件"C:\ TensorFlow\Keras\ResNet-50\test_sgd.py",第10行,在model.compile中(loss ='mean_squared_error',optimizer = SGD(lr = 0.01),metrics = ['accuracy'])文件"C:\ Users \nsugiant\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\keras_impl\keras\models.py",第787行,在编译中**kwargs)文件"C:\ Users \nsugiant\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\keras_impl\keras\engine\training.py",第632行,编译自我.optimizer = optimizers.get(optimizer)文件"C:\ Users \nsugiant\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\keras_impl\keras\optimizers.py",第788行, in get raise ValueError('无法解释优化器标识符:',标识符)ValueError:('无法解释优化程序标识符:',)

Pri*_*ary 29

我最近遇到了类似的问题.

原因是你正在为模型和层使用tensorflow.python.keras api,为SGD使用keras.optimizers.它们是张量流和纯keras的两种不同的keras版本.他们无法一起工作.您必须将所有内容更改为一个版本.然后它应该工作.:)

希望这可以帮助.

  • 这不起作用,你应该给出一个可行的解决方案 (6认同)

Sac*_*mar 10

这个问题主要是由于版本不同造成的。tensorflow.keras 版本可能与 keras 不同。从而导致@Priyanka 提到的错误。

对我来说,每当出现此错误时,我都会将优化器的名称作为字符串传入,然后后端会计算出来。例如代替

tf.keras.optimizers.Adam
Run Code Online (Sandbox Code Playgroud)

或者

keras.optimizers.Adam
Run Code Online (Sandbox Code Playgroud)

我愿意

model.compile(optimizer= 'adam' , loss= keras.losses.binary_crossentropy, metrics=['accuracy'])
Run Code Online (Sandbox Code Playgroud)

  • 是的,您可以传递优化器的字符串名称作为优化器参数的值,但是当您想要调整优化器设置(例如学习率)时,使用 tf.keras.optimizers.Adam 函数更灵活。 (2认同)

小智 6

我在这里有点晚了,您的问题是您在代码中混合了Tensorflow keras和keras API。优化器和模型应来自同一层定义。使用Keras API进行以下所有操作:

from keras.models import Sequential
from keras.layers import Dense, Dropout, LSTM, BatchNormalization
from keras.callbacks import TensorBoard
from keras.callbacks import ModelCheckpoint
from keras.optimizers import adam

# Set Model
model = Sequential()
model.add(LSTM(128, input_shape=(train_x.shape[1:]), return_sequences=True))
model.add(Dropout(0.2))
model.add(BatchNormalization())

# Set Optimizer
opt = adam(lr=0.001, decay=1e-6)

# Compile model
model.compile(
    loss='sparse_categorical_crossentropy',
    optimizer=opt,
    metrics=['accuracy']
)
Run Code Online (Sandbox Code Playgroud)

在此示例中,我使用了亚当。请按照上述代码使用相关的优化器。

希望这可以帮助。


Ela*_*zar 5

对于某些库(例如keras_radam),您需要在导入之前设置环境变量:

import os
os.environ['TF_KERAS'] = '1'

import tensorflow
import your_library
Run Code Online (Sandbox Code Playgroud)


小智 5

from tensorflow.keras.optimizers import SGD
Run Code Online (Sandbox Code Playgroud)

这很好用。

从 Tensorflow 2.0 开始,有一个新的 API 可以直接通过tensorflow

解决方案适用于tensorflow==2.2.0rc2Keras==2.2.4(在 Win10 上)

另请注意,上面的版本learning_rate用作参数而不是lr


Qin*_*ang 5

就我而言,这是因为我错过了括号。我正在使用 tensorflow_addons 所以我的代码就像

model.compile(optimizer=tfa.optimizers.LAMB, loss='binary_crossentropy',
              metrics=['binary_accuracy'])
Run Code Online (Sandbox Code Playgroud)

它给出了

ValueError: ('Could not interpret optimizer identifier:', <class tensorflow_addons.optimizers.lamb.LAMB'>)

然后我将代码更改为:

model.compile(optimizer=tfa.optimizers.LAMB(), loss='binary_crossentropy',
              metrics=['binary_accuracy'])
Run Code Online (Sandbox Code Playgroud)

它有效。


小智 5

最近,在 Keras API 2.5.0 最新更新中,导入 Adam 优化器出现以下错误:

from keras.optimizers import Adam
ImportError: cannot import name 'Adam' from 'keras.optimizers' 
Run Code Online (Sandbox Code Playgroud)

而是使用以下内容来导入优化器(即 Adam):

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


Doc*_*ven 1

尝试将导入行更改为

from keras.models import Sequential
from keras.layers import Dense, ...
Run Code Online (Sandbox Code Playgroud)

你的进口对我来说有点奇怪。也许你可以详细说明这一点。