首页 > 解决方案 > 使用 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_growthtf.data.experimental.copy_to_devicetf.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?

标签: pythontensorflowkerasversioncompatibility

解决方案


推荐阅读