[英]“Could not interpret optimizer identifier” error in Keras
当我尝试在 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), 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 行,在 get raise ValueError('Could not interpret optimizer identifier:', identifier) ValueError: ('Could not interpret optimizer identifier:', )
我最近遇到了类似的问题。
原因是您对模型和层使用 tensorflow.python.keras api,对 SGD 使用 keras.optimizers。 它们是 tensorflow 和纯 keras 的两个不同 keras 版本。 他们不能一起工作。 您必须将所有内容更改为一个版本。 那么它应该工作。 :)
希望这可以帮助。
我来晚了,您的问题是您的代码中混合了 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']
)
我在这个例子中使用了 adam。 请按照上面的代码使用您的相关优化器。
希望这可以帮助。
这个问题主要是由于版本不同造成的。 tensorflow.keras 版本可能与 keras 不同。 从而导致@Priyanka 提到的错误。
对我来说,每当出现此错误时,我都会将优化器的名称作为字符串传入,后端会计算出来。 例如代替
tf.keras.optimizers.Adam
或者
keras.optimizers.Adam
我愿意
model.compile(optimizer= 'adam' , loss= keras.losses.binary_crossentropy, metrics=['accuracy'])
from tensorflow.keras.optimizers import SGD
这很好用。
从 Tensorflow 2.0 开始,有一个新的 API 可以直接通过tensorflow
:
解决方案适用于tensorflow==2.2.0rc2
, tensorflow==2.2.0rc2
Keras==2.2.4
(在 Win10 上)
另请注意,上述版本使用learning_rate
作为参数,不再使用lr
。
对于某些库(例如keras_radam
),您需要在导入之前设置一个环境变量:
import os
os.environ['TF_KERAS'] = '1'
import tensorflow
import your_library
运行 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 在很多情况下“破坏”和 keras.stuff 变成了 tensorflow.keras.stuff。
我尝试了以下方法,它对我有用:
从 keras 导入优化器
sgd = 优化器.SGD(lr=0.01)
model.compile(loss='mean_squared_error', 优化器=sgd)
就我而言,这是因为我错过了括号。 我正在使用 tensorflow_addons 所以我的代码就像
model.compile(optimizer=tfa.optimizers.LAMB, loss='binary_crossentropy',
metrics=['binary_accuracy'])
它给
ValueError: ('Could not interpret optimizer identifier:', <class tensorflow_addons.optimizers.lamb.LAMB'>)
然后我将代码更改为:
model.compile(optimizer=tfa.optimizers.LAMB(), loss='binary_crossentropy',
metrics=['binary_accuracy'])
它有效。
一个内核使用一种样式,尽量不要混用
from keras.optimizers import sth
和
from tensorflow.keras.optimizers import sth
用
从 tensorflow.keras 导入优化器
代替
从 keras 导入优化器
最近,在 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=['--'])
尝试将导入行更改为
from keras.models import Sequential
from keras.layers import Dense, ...
你的进口对我来说似乎有点奇怪。 也许你可以更详细地说明这一点。
就给
optimizer = 'sgd' / 'RMSprop'
我放错了括号并得到这个错误,
最初是
x=Conv2D(filters[0],(3,3),use_bias=False,padding="same",kernel_regularizer=l2(reg),x))
修正后的版本是
x=Conv2D(filters[0],(3,3),use_bias=False,padding="same",kernel_regularizer=l2(reg))(x)
我收到了相同的错误消息并解决了这个问题,就我而言,通过替换优化器的分配:
optimizer=keras.optimizers.Adam
使用它的实例而不是类本身:
optimizer=keras.optimizers.Adam()
我尝试了这个线程中的所有方法来修复它,但它们没有用。 但是,我设法为我修复了它。 对我来说,问题是调用优化器类,即。 tensorflow.keras.optimizers.Adam
导致错误,但将优化器作为函数调用,即。 tensorflow.keras.optimizers.Adam()
工作。 所以我的代码看起来像:
model.compile(
loss=tensorflow.keras.losses.categorical_crossentropy(),
optimizer=tensorflow.keras.optimizers.Adam()
)
查看 tensorflow github, 我不是唯一一个出现此错误的人,其中调用函数而不是类来修复错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.