python - 使用 tf.keras.mixed_precision.experimental 时如何使 Tensorflow 检查点在次要版本之间兼容?
问题描述
我是 Tensorflow 的新手,所以我正在学习模型保存/加载方案。我正在使用一个库,它提供了一个保存在 Tensorflow 2.2 中的模型检查点(仅限 .index 和 .data 文件)。我想使用同一个库但使用 Tensorflow 2.6 加载此检查点,以便它可以在 Google Colab 中运行。当我在 Tensorflow 2.2(带有关联的 CUDA 版本)中加载检查点时,模型工作正常。但是,如果我在 Tensorflow 2.6(使用最新的 CUDA 版本)中加载相同的检查点,模型运行时不会抛出任何错误,但输出完全不同。
需要注意的是,该库确实使用了一些可能导致版本兼容性问题的实验性 API(如官方指南中所述)。特别是,它广泛使用tensorflow.keras.mixed_precision.experimental以及tf.config.experimental.set_memory_growth、tf.data.experimental.copy_to_device和tf.data.experimental.AUTOTUNE。直观地说,mixed_precision.experimental似乎可能会显着影响次要版本的重量节省/加载。
我确实收到以下警告。如果我改用tf.keras.mixed_precision(没有实验性),它们就会消失,但是模型输出仍然完全错误。
警告:tensorflow:来自/usr/local/lib/python3.7/dist-packages/keras/mixed_precision/loss_scale.py:52:DynamicLossScale。init(来自 tensorflow.python.training.experimental.loss_scale)已被弃用,将在未来的版本中删除。
更新说明:改用 tf.keras.mixed_precision.LossScaleOptimizer。LossScaleOptimizer 现在拥有 DynamicLossScale 的所有功能
警告:tensorflow:来自/usr/local/lib/python3.7/dist-packages/tensorflow/python/training/tracking/util.py:1361:NameBasedSaverStatus。init(来自 tensorflow.python.training.tracking.util)已弃用,将在未来版本中删除。
更新说明:使用基于对象的恢复 API 恢复基于名称的 tf.train.Saver 检查点。这种模式使用全局名称来匹配变量,因此有些脆弱。每次在图形构建时调用它时,它还会向图形添加新的恢复操作。更喜欢以基于对象的格式重新编码训练检查点:在基于对象的保护程序上运行 save()(与此消息来自同一个)并在将来使用该检查点。
关于保存混合精度模型检查点以使其在次要版本之间兼容的任何建议?还是一般处理实验性的 Tensorflow API?
解决方案
推荐阅读
- regex - 在 vscode 中使用正则表达式来更改一些代码
- android - 如何在库中包含另一个库
- java - 调用服务依赖于使用单个控制器的 PathVariable
- javascript - 嵌套函数调用在 express.js 中用 module.exports() 包装后不起作用
- javascript - 建立在选择列表中单击的项目数组并将值分配给元素
- spring - 接受 Hashmap 作为 POST 调用的主体
- javascript - ASP.NET Razor - 为使用 JQuery 的编辑器添加 min 属性
- kubernetes - 在 Seldon Core 上将模型 A 的输出路由为模型 B 的输入
- javascript - 如何访问两个参数,一个是数组,另一个是值?
- ruby-on-rails - 拒绝在 Rails 中加载样式表