为了账号安全,请及时绑定邮箱和手机立即绑定

如何序列化keras模型的类对象

如何序列化keras模型的类对象

慕勒3428872 2022-10-25 15:55:50
我试图保存 keras 完整模型,但遇到了这个错误Traceback (most recent call last):  File "d:/Workspace/College/Semester 8/Tugas Akhir/Keras-RFCN-master/Keras-RFCN-master/testing.py", line 133, in <module>    main()  File "d:/Workspace/College/Semester 8/Tugas Akhir/Keras-RFCN-master/Keras-RFCN-master/testing.py", line 96, in main    model.save("D:/weight.h5")  File "d:\Workspace\College\Semester 8\Tugas Akhir\Keras-RFCN-master\Keras-RFCN-master\KerasRFCN\Model\Model.py", line 560, in save    self.model.save(save_path)  File "C:\Users\kevin\anaconda3\envs\tf-gpu\lib\site-packages\keras\engine\network.py", line 1139, in save    save_model(self, filepath, overwrite, include_optimizer)  File "C:\Users\kevin\anaconda3\envs\tf-gpu\lib\site-packages\keras\engine\saving.py", line 415, in save_wrapper    save_function(obj, filepath, overwrite, *args, **kwargs)  File "C:\Users\kevin\anaconda3\envs\tf-gpu\lib\site-packages\keras\engine\saving.py", line 507, in save_model    _serialize_model(model, h5dict, include_optimizer)  File "C:\Users\kevin\anaconda3\envs\tf-gpu\lib\site-packages\keras\engine\saving.py", line 101, in _serialize_model    model_config = json.dumps(model_config, default=get_json_type)  File "C:\Users\kevin\anaconda3\envs\tf-gpu\lib\json\__init__.py", line 238, in dumps    **kw).encode(obj)  File "C:\Users\kevin\anaconda3\envs\tf-gpu\lib\json\encoder.py", line 199, in encode    chunks = self.iterencode(o, _one_shot=True)  File "C:\Users\kevin\anaconda3\envs\tf-gpu\lib\json\encoder.py", line 257, in iterencode    return _iterencode(o, 0)  File "C:\Users\kevin\anaconda3\envs\tf-gpu\lib\site-packages\keras\engine\saving.py", line 91, in get_json_type    raise TypeError('Not JSON Serializable: %s' % (obj,))TypeError: Not JSON Serializable: <KerasRFCN.Config.Config object at 0x0000029B0A3BD248>通过该错误,很明显 JSON 无法序列化我的类,该类返回一个名为 config 的对象。那么如何确保 Keras 可以序列化我的配置..??我认为在init中定义的所有定义都可以序列化。我真的是 python、Keras 和 TensorFlow 的新手。
查看完整描述

1 回答

?
哔哔one

TA贡献1854条经验 获得超8个赞

如果您使用的是子类模型,那么在定义模型之后,您需要在一些数据上调用模型,例如model.predict(x)这将创建权重并使模型能够使用model.save或'model.save_weights andload_weights`保存

首先,一个从未使用过的子类模型是无法保存的。

这是因为需要在某些数据上调用子类模型才能创建其权重。

在调用模型之前,它不知道它应该期望的输入数据的形状和 dtype,因此无法创建其权重变量。

有关该方法的更多详细信息,请参见此处的示例


查看完整回答
反对 回复 2022-10-25
  • 1 回答
  • 0 关注
  • 76 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信