首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以不同版本从tf.keras加载保存的模型(从TF-2.3.0加载到TF-1.12)

以不同版本从tf.keras加载保存的模型(从TF-2.3.0加载到TF-1.12)
EN

Stack Overflow用户
提问于 2021-11-15 16:29:12
回答 1查看 789关注 0票数 2

问题:我已经在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

我试图通过使用另一个问题所建议的以下行来解决这个问题:

代码语言:javascript
复制
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-onnxhttps://github.com/gmalivenko/onnx2keras

任何建议,如何绕过这一点,而不必再培训我的模型在一个较旧版本的tensorflow,将非常感谢!谢谢

下面是我试图实现的加载模型的简单代码:

保存在TF-2.3.0

代码语言:javascript
复制
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负载

代码语言:javascript
复制
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')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-16 12:21:31

从tf-1.12.0到tf-2.3.0,模型配置发生了一些变化,包括但不限于:

  1. (根类模型)现在是功能性的
  2. ,tf-1.15

中增加了对粗糙张量的支持

您可以尝试编辑从tf-2.3.0中保存的模型配置json文件,以逆转这些更改的影响,如下所示:

  1. 将根类定义"class_name": "Functional"替换为"class_name": "Model"。这将逆转更改#1 above.
  2. Delete的影响--所有发生的"ragged": false, (如果存在"ragged": true,的话)。这将逆转上述更改#2的影响。

Note尾随的逗号和空格以及上面的“破烂”字段

您可能尝试在json字典或模型加载时找到一种方法以编程方式进行这些更改,但我发现对json文件本身进行这些一次性更改更容易。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69977719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档