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() 完全支持(请参阅 complete TF2 SavedModel 创建指南

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