从不同版本的 tf.keras 加载保存的模型(从 tf 2.3.0 到 tf 1.12)
Loading the saved models from tf.keras in different versions (From tf 2.3.0 to tf 1.12)
问题:
我在 tf 2.3.0 中创建并训练了一个 keras 模型,我需要在 tf 1.12.0 中加载这个模型,以便与需要旧版本 tf 的库一起使用。有什么方法可以将模型从新版本的 tf 格式转换为旧版本,以便我可以使用 tf 1.12.0 加载模型?
到目前为止我尝试过的:
类似的讨论展示了如何将模型从 tf 1.15 - 2.1 转换为 tf.10,但是当我尝试这个解决方案时,我收到错误“Unknown layer: functional”。 Link: Loading the saved models from tf.keras in different versions
我尝试使用另一个问题建议的以下行来解决此问题:
new_model = tf.keras.models.model_from_json(json_config, custom_objects {'Functional':tf.keras.models.Model})
Link:
但是,如果我使用这个,我会得到一个错误: ('Unrecognized keyword arguments:', dict_keys(['ragged'])) ,这与第一次讨论中讨论的错误相同我在上面链接了。
我尝试的另一种方法是使用 Onnx 库将 keras 模型转换为 Onnx 模型,然后再转换回不同版本的 keras 模型。然而,我很快意识到 keras2onnx 库需要 tf 2.x.
Links: https://github.com/onnx/tensorflow-onnx and https://github.com/gmalivenko/onnx2keras
任何关于如何解决这个问题而不必在旧版本的 tensorflow 中重新训练我的模型的建议将不胜感激!谢谢
这是我尝试实现的加载模型的简单代码:
保存在 tf 2.3.0
import tensorflow as tf
CNN_model=tf.keras.models.load_model('Real_Image_XAI_Models/Test_10_DC_R_Image.h5')
CNN_model.save_weights("Real_Image_XAI_Models/weights_only.h5")
json_config = CNN_model.to_json()
with open('Real_Image_XAI_Models/model_config.json', 'w') as json_file:
json_file.write(json_config)
加载 tf 1.12.0
with open('Real_Image_XAI_Models/model_config.json') as json_file:
json_config = json_file.read()
new_model = tf.keras.models.model_from_json(json_config)
#or implement the line to acount for the functional class
#new_model = tf.keras.models.model_from_json(json_config, custom_objects={'Functional':tf.keras.models.Model})
new_model.load_weights('Real_Image_XAI_Models/weights_only.h5')
从 tf-1.12.0 到 tf-2.3.0 的模型配置有重大变化,包括但不限于以下内容:
- root class Model 现在是 Functional
- 在 tf-1.15
中添加了对 Ragged 张量 的支持
您可以尝试编辑从 tf-2.3.0 保存的模型配置 json 文件,以反转这些更改的影响,如下所示:
- 将根 class 定义
"class_name": "Functional"
替换为 "class_name": "Model"
。这将逆转上面更改 #1 的效果。
- 删除所有出现的
"ragged": false,
(以及 "ragged": true,
,如果存在的话)。这将逆转上面更改 #2 的效果。
注意 尾随逗号和 space 以及上面的“参差不齐”的字段
您可能会尝试找到一种在 json 字典中或在模型加载时以编程方式进行这些更改的方法,但我发现对 json 文件本身。
问题: 我在 tf 2.3.0 中创建并训练了一个 keras 模型,我需要在 tf 1.12.0 中加载这个模型,以便与需要旧版本 tf 的库一起使用。有什么方法可以将模型从新版本的 tf 格式转换为旧版本,以便我可以使用 tf 1.12.0 加载模型?
到目前为止我尝试过的: 类似的讨论展示了如何将模型从 tf 1.15 - 2.1 转换为 tf.10,但是当我尝试这个解决方案时,我收到错误“Unknown layer: functional”。 Link: Loading the saved models from tf.keras in different versions
我尝试使用另一个问题建议的以下行来解决此问题:
new_model = tf.keras.models.model_from_json(json_config, custom_objects {'Functional':tf.keras.models.Model})
Link:
但是,如果我使用这个,我会得到一个错误: ('Unrecognized keyword arguments:', dict_keys(['ragged'])) ,这与第一次讨论中讨论的错误相同我在上面链接了。
我尝试的另一种方法是使用 Onnx 库将 keras 模型转换为 Onnx 模型,然后再转换回不同版本的 keras 模型。然而,我很快意识到 keras2onnx 库需要 tf 2.x.
Links: https://github.com/onnx/tensorflow-onnx and https://github.com/gmalivenko/onnx2keras
任何关于如何解决这个问题而不必在旧版本的 tensorflow 中重新训练我的模型的建议将不胜感激!谢谢
这是我尝试实现的加载模型的简单代码:
保存在 tf 2.3.0
import tensorflow as tf
CNN_model=tf.keras.models.load_model('Real_Image_XAI_Models/Test_10_DC_R_Image.h5')
CNN_model.save_weights("Real_Image_XAI_Models/weights_only.h5")
json_config = CNN_model.to_json()
with open('Real_Image_XAI_Models/model_config.json', 'w') as json_file:
json_file.write(json_config)
加载 tf 1.12.0
with open('Real_Image_XAI_Models/model_config.json') as json_file:
json_config = json_file.read()
new_model = tf.keras.models.model_from_json(json_config)
#or implement the line to acount for the functional class
#new_model = tf.keras.models.model_from_json(json_config, custom_objects={'Functional':tf.keras.models.Model})
new_model.load_weights('Real_Image_XAI_Models/weights_only.h5')
从 tf-1.12.0 到 tf-2.3.0 的模型配置有重大变化,包括但不限于以下内容:
- root class Model 现在是 Functional
- 在 tf-1.15 中添加了对 Ragged 张量 的支持
您可以尝试编辑从 tf-2.3.0 保存的模型配置 json 文件,以反转这些更改的影响,如下所示:
- 将根 class 定义
"class_name": "Functional"
替换为"class_name": "Model"
。这将逆转上面更改 #1 的效果。 - 删除所有出现的
"ragged": false,
(以及"ragged": true,
,如果存在的话)。这将逆转上面更改 #2 的效果。
注意 尾随逗号和 space 以及上面的“参差不齐”的字段
您可能会尝试找到一种在 json 字典中或在模型加载时以编程方式进行这些更改的方法,但我发现对 json 文件本身。