Keras提示Could not interpret optimizer identifier: SGD报错如何解决?
问题根因
你当前的代码同时混用了独立安装的Keras库和TensorFlow内置的tf.keras库,两者虽然API外观相似但属于完全独立的命名空间,独立Keras的模型编译逻辑无法识别tf.keras下的优化器实例,因此抛出优化器识别错误。
修复方案
优先推荐统一使用tf.keras命名空间的方案,独立Keras包目前已停止维护,所有功能更新已合并到tf.keras中:
- 把所有
from keras.xxx格式的导入全部替换为from tensorflow.keras.xxx,补全缺失的层和模型类导入即可正常运行,修复后完整代码如下:
from tensorflow.keras.optimizers import SGD from tensorflow.keras.initializers import RandomUniform from tensorflow.keras.callbacks import TensorBoard from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense from tensorflow import keras import tensorflow as tf init = RandomUniform(minval=0, maxval=1) model = Sequential() model.add(Dense(5, input_dim=2, activation='tanh', kernel_initializer=init)) model.add(Dense(5, activation='tanh', kernel_initializer=init)) model.add(Dense(5, activation='tanh', kernel_initializer=init)) model.add(Dense(5, activation='tanh', kernel_initializer=init)) model.add(Dense(5, activation='tanh', kernel_initializer=init)) model.add(Dense(1, activation='sigmoid', kernel_initializer=init)) opt = SGD(learning_rate = 0.01, momentum=0.9) model.compile(loss='binary_crossentropy', optimizer= opt, metrics=['accuracy']) tb = TensorBoard(histogram_freq=1, write_grads=True) model.fit(trainX, trainy, validation_data=(testX, testy), epochs=500, verbose=0, callbacks=[tb])
- 如果你需要继续使用独立Keras包,只需把所有tf.keras相关导入全部替换为独立Keras的导入即可,比如SGD的导入改回
from keras.optimizers import SGD,同时确保Sequential、Dense等类也都从keras命名空间导入。
内容的提问来源于stack exchange,提问作者Wu Kris
相关产品推荐
相关产品推荐

