TF1/TF2 的模型兼容性

TF Hub 模型格式

TF Hub 提供了可重用的模型,可以在 TensorFlow 程序中重新加载、以之为基础进行构建以及重新训练。这些模型有两种不同的格式:

tfhub.dev 上的模型页面提供了模型格式信息。根据模型格式,TF1/2 中可能不支持模型加载/推断微调创建

TF1 Hub 格式兼容性

操作 TF2 中的 TF1/TF1 兼容模式 [1] TF2
加载/推断 完全支持(完整的 TF1 Hub 格式加载指南
m = hub.Module(handle) outputs = m(inputs)
建议使用 hub.load
m = hub.load(handle)
outputs = m.signatures["sig"](inputs)
或 hub.KerasLayer
m = hub.KerasLayer(handle, signature="sig")
outputs = m(inputs)
微调 完全支持(完整的 TF1 Hub 格式微调指南
m = hub.Module(handle, trainable=True, tags=["train"]*is_training) outputs = m(inputs)
注:不需要单独的训练计算图的模块没有训练标签。
不受支持
创建 完全支持(请参阅完整的 TF1 Hub 格式创建指南
注:TF1 Hub 格式适用于 TF1,而在 TF2 中仅部分受支持。请考虑创建 TF2 SavedModel。
不受支持

TF2 SavedModel 兼容性

TF1.15 之前的版本不支持。

操作 TF2 中的 TF1.15/ TF1 兼容模式 [1] TF2
加载/推断 使用 hub.load
m = hub.load(handle) outputs = m(inputs)
或 hub.KerasLayer
m = hub.KerasLayer(handle) outputs = m(inputs)
完全支持(完整的 TF2 SavedModel 加载指南)。使用 hub.load
m = hub.load(handle)
outputs = m(inputs)
或 hub.KerasLayer
m = hub.KerasLayer(handle)
outputs = m(inputs)
微调 当通过 Model.fit() 训练或在 Estimator(model_fn 根据自定义 model_fn 指南封装模型)中进行训练时,在 tf.keras.Model 中使用的 hub.KerasLayer 支持。
注:hub.KerasLayer 不会像旧 tf.compat.v1.layers 或 hub.Module API 一样填充计算图集合。
完全支持(完整的 TF2 SavedModel 微调指南)。 使用 hub.load:
m = hub.load(handle)
outputs = m(inputs, training=is_training)
或 hub.KerasLayer:
m =  hub.KerasLayer(handle, trainable=True)
outputs = m(inputs)
创建 可以在兼容性模式下调用 TF2 API tf.saved_model.save() 完全支持(请参阅完整的 TF2 SavedModel 创建指南

[1]“TF2 中的 TF1 兼容性模式”指的是使用 import tensorflow.compat.v1 as tf 导入 TF2 并运行 tf.disable_v2_behavior() 的组合效果,如 TensorFlow 迁移指南所述。