[英]“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.