问题:我已经在tf 2.3.0中创建并训练了一个keras模型,我需要在tf 1.12.0中加载这个模型,以便与一个需要较旧版本tf的库一起使用。有没有办法将模型从tf的新版本格式转换为旧版本,这样我就可以用tf 1.12.0加载模型了吗?
到目前为止,我尝试过的是:类似的讨论展示了如何将模型从TF-1.15- 2.1转换到tf.10,但是当我尝试这个解决方案时,我得到了一个错误“未知层:功能”。链接: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})链接:ValueError: Unknown layer: Functional
但是,如果我使用此方法,则会得到一个错误:(“未识别的关键字参数:”,dict_keys(“ragged”)),这与我在上面链接的第一次讨论中讨论的错误相同。
我尝试过的另一种方法是使用Onnx库将keras模型转换为Onnx模型,然后返回到不同版本的keras模型。但是,我很快意识到keras2onnx库需要Tf2.x。
链接:https://github.com/onnx/tensorflow-onnx和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')发布于 2021-11-16 12:21:31
从tf-1.12.0到tf-2.3.0,模型配置发生了一些变化,包括但不限于:
中增加了对粗糙张量的支持
您可以尝试编辑从tf-2.3.0中保存的模型配置json文件,以逆转这些更改的影响,如下所示:
"class_name": "Functional"替换为"class_name": "Model"。这将逆转更改#1 above."ragged": false, (如果存在"ragged": true,的话)。这将逆转上述更改#2的影响。Note尾随的逗号和空格以及上面的“破烂”字段
您可能尝试在json字典或模型加载时找到一种方法以编程方式进行这些更改,但我发现对json文件本身进行这些一次性更改更容易。
https://stackoverflow.com/questions/69977719
复制相似问题