我已经使用自定义优化器编译并训练了keras模型。我保存了模型,但是当我尝试加载模型时,它抛出错误,指出 public void onButtonJump()
{
if (controller.isGrounded )
{
verticalVelocity = -gravity * Time.deltaTime;
{
verticalVelocity = jumpForce;
animator.SetBool("is_in_air", true);
jump.Play();
}
}
else
{
animator.SetBool("is_in_air", false);
verticalVelocity -= gravity * Time.deltaTime;
}
}
。我试图将MyOptimizer作为自定义对象传递,例如:ValueError: Unknown optimizer: MyOptimizer
,但仍然会引发错误。如何使用自定义对象将模型加载为keras模型?
答案 0 :(得分:1)
我遇到了同样的问题。但是,我的模型中有两种不同的自定义内容。一个是我的优化器,另一个是自定义层。因此,我解决了我的问题如下:
my_loaded_model = tf.keras.models.load_model('my_models_name.h5', custom_objects={'KerasLayer':hub.KerasLayer , 'AdamWeightDecay': optimizer})
答案 1 :(得分:0)
我遇到了同样的问题:)
我通过向模型加载models.load_model('myModel.h5', compile=False)
使之起作用。
来自喀拉拉邦source code:
如果在保存的模型中找到优化器,则该模型已经编译。否则,该模型将无法编译,并且将显示警告。当
compile
设置为False时,编译会被忽略,而不会发出任何警告。
加载未编译的模型后,我可以使用自定义优化器再次对其进行编译。
答案 2 :(得分:0)
我认为您需要更改custom_objects字典的密钥:
models.load_model('myModel.h5', custom_objects={'optimizer': MyOptimizer})
我相信它应该与对象的函数名称匹配。
答案 3 :(得分:0)
在您的情况下,您必须使用优化程序类的名称作为custom_objects词典中的键,因为优化程序将是“ MyOptimizer”对象,
models.load_model('myModel.h5', custom_objects={'MyOptimizer': MyOptimizer})
应该工作