我已经用自定义优化器编译和训练了一个Keras模型。我保存了这个模型,但是当我尝试加载它时,会出现错误信息:“ValueError: 未知的优化器:MyOptimizer”。我试图通过传递自定义对象来解决这个问题,代码如下:models.load_model('myModel.h5', custom_objects={'optimizer':MyOptimizer})
,但它仍然报错。那么,如何加载带有自定义对象的Keras模型?
我已经用自定义优化器编译和训练了一个Keras模型。我保存了这个模型,但是当我尝试加载它时,会出现错误信息:“ValueError: 未知的优化器:MyOptimizer”。我试图通过传递自定义对象来解决这个问题,代码如下:models.load_model('myModel.h5', custom_objects={'optimizer':MyOptimizer})
,但它仍然报错。那么,如何加载带有自定义对象的Keras模型?
我也遇到了同样的问题 :)
通过使用models.load_model('myModel.h5', compile=False)
来加载模型,我解决了这个问题。
根据keras 源代码:
如果在保存的模型中已经存在优化器,则模型已经被编译。否则,模型未被编译,将显示一条警告信息。当设置
compile
为False时,编译将被省略而不会有任何警告。
在加载了未编译的模型后,我可以再次使用自定义优化器进行编译。
您需要在custom_objects字典中使用优化器类名作为键,对于您的情况,优化器将是'MyOptimizer'对象。
models.load_model('myModel.h5', custom_objects={'MyOptimizer': MyOptimizer})
应该正常工作
我有同样的问题。然而,我的模型中有两个不同的自定义部分。一个是我的优化器,另一个是自定义层。因此,我解决了我的问题如下:
my_loaded_model = tf.keras.models.load_model('my_models_name.h5', custom_objects={'KerasLayer':hub.KerasLayer , 'AdamWeightDecay': optimizer})