Ошибка «Не удается интерпретировать идентификатор оптимизатора» в Keras - PullRequest
0 голосов
/ 27 апреля 2018

Я получил эту ошибку, когда попытался изменить параметр скорости обучения оптимизатора 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 (последний вызов был последним): File «C: \ TensorFlow \ Keras \ ResNet-50 \ test_sgd.py», строка 10, в Файл model.compile (потеря = 'mean_squared_error', оптимизатор = SGD (lr = 0,01), метрика = ['точность']) Файл "C: \ Users \ nsugiant \ AppData \ Local \ Programs \ Python \ Python35 \ Lib \ сайт-пакеты \ tensorflow \ питон \ keras_impl \ keras \ models.py", строка 787, в компиляции ** kwargs) Файл "C: \ Users \ nsugiant \ AppData \ Local \ Programs \ Python \ Python35 \ lib \ site-packages \ tenorflow \ python \ keras_impl \ keras \ engine \ training.py", строка 632, в компиляции self.optimizer = optimizer.get (optimizer) Файл "C: \ Users \ nsugiant \ AppData \ Local \ Programs \ Python \ Python35 \ lib \ site-packages \ tenorflow \ python \ keras_impl \ keras \ optimizer.py", строка 788, в get повысить ValueError («Не удалось интерпретировать идентификатор оптимизатора:», идентификатор) ValueError: («Не удалось интерпретировать идентификатор оптимизатора:», )

Ответы [ 6 ]

0 голосов
/ 25 июня 2019

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

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

tf.keras.optimizers.Adam

или

keras.optimizers.Adam

Я делаю

model.compile(optimizer= 'adam' , loss= keras.losses.binary_crossentropy, metrics=['accuracy'])
0 голосов
/ 04 апреля 2019

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

(на момент написания этой статьи tenensflow 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.

0 голосов
/ 13 декабря 2018

Я немного опоздал, ваша проблема в том, что вы пропустили API-интерфейс keras и keras в своем коде. Оптимизатор и модель должны исходить из одного и того же определения слоя. Используйте 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']
)

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

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

0 голосов
/ 02 июля 2018

Просто дай

optimizer = 'sgd' / 'RMSprop'
0 голосов
/ 27 апреля 2018

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

Причина заключается в том, что вы используете API-интерфейс tenorflow.python.keras для модели и слоев и keras.optimizer для SGD. Это две разные версии керас тензор потока и чистых керас. Они не могли работать вместе. Вы должны изменить все на одну версию. Тогда это должно работать. :)

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

0 голосов
/ 27 апреля 2018

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...