TF1/TF2 模型兼容性

TF Hub 模型格式

TF Hub 提供可重用的模型片段,这些片段可以加载回来,构建其上,并可能在 TensorFlow 程序中重新训练。它们有两种不同的格式

模型格式可以在 tfhub.dev 上的模型页面上找到。模型的 **加载/推理**、**微调** 或 **创建** 可能不支持 TF1/2,具体取决于模型格式。

TF1 Hub 格式的兼容性

操作 TF1/ TF2 中的 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 之前不支持。

操作 TF1.15/ TF2 中的 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 中训练时,支持在 tf.keras.Model 中使用的 hub.KerasLayer,该 Estimator 的 model_fn 根据 自定义 model_fn 指南 包装 Model。
注意: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 兼容模式”是指导入 TF2 时 import tensorflow.compat.v1 as tf 和运行 tf.disable_v2_behavior() 的组合效果,如 TensorFlow 迁移指南 中所述。