Keras中的“无法解释优化器标识符”错误
keras
python
python-3.x
tensorflow
6
0

当我尝试在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'])*

这是错误消息:

追溯(最近一次通话):文件“ C:\ TensorFlow \ Keras \ ResNet-50 \ test_sgd.py”,行10,位于model.compile(loss ='mean_squared_error',optimizer = SGD(lr = 0.01),指标= ['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,在获取引发ValueError('无法解释优化器标识符:',标识符)ValueError:('无法解释优化器标识符:',)

参考资料:
Stack Overflow
收藏
评论
共 5 个回答
高赞 时间 活跃

运行Keras文档示例https://keras.io/examples/cifar10_cnn/并安装最新的keras和张量流版本

(在撰写本文时tensorflow 2.0.0a0和Keras版本2.2.4)

我必须显式导入示例所使用的keras的优化程序,特别是示例顶部的行:

opt = tensorflow.keras.optimizers.rmsprop(lr=0.0001, decay=1e-6)

被替换为

from tensorflow.keras.optimizers import RMSprop

opt = RMSprop(lr=0.0001, decay=1e-6)

在最新版本中,api“ broke”和keras.stuff在许多情况下成为tensorflow.keras.stuff。

收藏
评论

我来晚了,您的问题是您在代码中混合了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']
)

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

希望这可以帮助。

收藏
评论

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

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

import tensorflow
import your_library
收藏
评论

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

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

希望这可以帮助。

收藏
评论

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

对我来说,每当出现此错误时,我都会以字符串的形式传入优化器的名称,然后后端就将其找出来。例如代替

tf.keras.optimizers.Adam

要么

keras.optimizers.Adam

我做

model.compile(optimizer= 'adam' , loss= keras.losses.binary_crossentropy, metrics=['accuracy'])
收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号