Tensorflow 如何使用自定义优化器加载keras保存的模型
我已经编译并训练了一个带有自定义优化器的keras模型。我保存了模型,但是当我尝试加载模型时,它抛出一个错误,声明Tensorflow 如何使用自定义优化器加载keras保存的模型,tensorflow,keras,deep-learning,keras-layer,keras-2,Tensorflow,Keras,Deep Learning,Keras Layer,Keras 2,我已经编译并训练了一个带有自定义优化器的keras模型。我保存了模型,但是当我尝试加载模型时,它抛出一个错误,声明ValueError:Unknown optimizer:MyOptimizer。我试图将MyOptimizer作为自定义对象传递,例如:models.load\u model('myModel.h5',custom\u objects={'optimizer':MyOptimizer}),但它仍然抛出一个错误。如何加载带有自定义对象的keras模型?我遇到了相同的问题:) 我使用m
ValueError:Unknown optimizer:MyOptimizer
。我试图将MyOptimizer作为自定义对象传递,例如:models.load\u model('myModel.h5',custom\u objects={'optimizer':MyOptimizer})
,但它仍然抛出一个错误。如何加载带有自定义对象的keras模型?我遇到了相同的问题:)
我使用models.load\u model('myModel.h5',compile=False)
加载模型,从而使其正常工作
来自keras:
如果在保存的模型中找到了优化器,则该模型已编译。否则,将解压缩模型并显示警告。当compile
设置为False时,编译将在没有任何警告的情况下忽略
加载未编译的模型后,我可以使用自定义优化器再次编译它。在您的情况下,必须使用优化器类的名称作为自定义对象字典中的键,因为优化器将是“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})
顺便说一句,您不需要仅为推理而编译