web-dev-qa-db-ja.com

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」、model.compile(loss = 'mean_squared_error'、optimizer = SGD(lr = 0.01)の10行目、メトリック= ['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)File "C:\ Users\nsugiant\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\keras_impl\keras\optimizers.py"、行788、 in get raise ValueError( 'オプティマイザ識別子を解釈できませんでした:'、identifier)ValueError:( 'オプティマイザ識別子を解釈できませんでした:'、)

13
Nehemia

私は最近、同様の問題に直面しました。

その理由は、モデルとレイヤーにtensorflow.python.keras apiを使用し、SGDにkeras.optimizersを使用しているためです。これらは、テンソルフローと純粋なケラの2つの異なるケラバージョンです。彼らは一緒に働くことができませんでした。すべてを1つのバージョンに変更する必要があります。その後、動作するはずです。 :)

お役に立てれば。

25

私はここで少し遅れています、あなたの問題はあなたのコードで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を使用しました。上記のコードに従って、関連するオプティマイザーを使用してください。

お役に立てれば。

5
Anju313

この問題は主に異なるバージョンが原因で発生します。 tensorflow.kerasバージョンは、kerasと同じでない場合があります。したがって、@ Priyankaで述べたエラーが発生します。

私にとって、このエラーが発生するたびに、オプティマイザーの名前を文字列として渡し、バックエンドがそれを把握します。たとえば

tf.keras.optimizers.Adam

または

keras.optimizers.Adam

私がやります

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

Kerasドキュメンテーションのサンプルの実行 https://keras.io/examples/cifar10_cnn/ および最新のkerasおよびテンソルフローバージョンのインストール

(この執筆時点で、テンソルフロー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がtensorflow.keras.stuffになりました。

1
partizanos

インポート行を変更してみてください

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

あなたの輸入品は私には少し奇妙に思えます。たぶん、あなたはそれについてさらに詳しく説明することができます。

0
DocDriven

与えるだけ

optimizer = 'sgd' / 'RMSprop'
0
manish