Ошибка "Не удалось интерпретировать идентификатор оптимизатора" в Keras

Я получил эту ошибку, когда попытался изменить параметр скорости обучения оптимизатора SGD в Keras. Я что-то пропустил в своих кодах, или мой 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'])*

и вот сообщение об ошибке:

Traceback (последний последний вызов): файл "C:\TensorFlow\Keras\ResNet-50\test_sgd.py", строка 10, в model.compile(loss = 'mean_squared_error', оптимизатор = SGD (lr = 0.01), показатели = ['precision']) Файл "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 (оптимизатор) Файл "C:\Users\nsugiant\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\keras_impl\keras\optimizers.py", строка 788, в get raise ValueError ('Невозможно интерпретировать идентификатор оптимизатора:', идентификатор) ValueError: ('Не удалось интерпретировать идентификатор оптимизатора:',)

Ответ 1

Недавно я столкнулся с подобной проблемой.

Причина в том, что вы используете tensorflow.python.keras api для модели и слоев и keras.optimizers для SGD. Это две разные версии keras тензорного потока и чистого кера. Они не могли работать вместе. Вы должны изменить все на одну версию. Тогда это должно сработать. :)

Надеюсь это поможет.

Ответ 2

Я немного опоздал, ваша проблема в том, что вы смешали 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']
)

Я использовал Адама в этом примере. Пожалуйста, используйте соответствующий оптимизатор в соответствии с приведенным выше кодом.

Надеюсь это поможет.

Ответ 3

Эта проблема в основном вызвана из-за разных версий. Версия tenorflow.keras может не совпадать с версией keras. Таким образом вызывая ошибку, упомянутую @Priyanka.

Для меня всякий раз, когда возникает эта ошибка, я передаю имя оптимизатора в виде строки, а бэкэнд вычисляет это. Например, вместо

tf.keras.optimizers.Adam

или же

keras.optimizers.Adam

я делаю

model.compile(optimizer= 'adam' , loss= keras.losses.binary_crossentropy, metrics=['accuracy'])

Ответ 4

Запуск примера документации Keras https://keras.io/examples/cifar10_cnn/ и установка последних версий Keras и Tenor Flow

(на момент написания этой статьи тензор потока 2.0.0a0 и версия Keras 2.2.4)

Мне пришлось явно импортировать оптимизатор керас, который использует пример, в частности строку в верхней части примера:

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 во многих случаях стал tenorflow.keras.stuff.

Ответ 5

Попробуйте изменить строки импорта на

from keras.models import Sequential
from keras.layers import Dense, ...

Импорт кажется мне немного странным. Может быть, вы могли бы подробнее рассказать об этом.

Ответ 6

Просто дайте

optimizer = 'sgd' / 'RMSprop'