TF Hub 模型格式
TF Hub 提供了可重用的模型,可以在 TensorFlow 程序中重新加载、以之为基础进行构建以及重新训练。这些模型有两种不同的格式:
- 自定义 TF1 Hub 格式。该格式主要通过其 hub.Module API 用于 TF1(或 TF2 中的 TF1 兼容模式)。下文介绍了完整的兼容性详细信息。
- 原生 TF2 SavedModel 格式。该格式主要通过 hub.load 和 hub.KerasLayer API 用于 TF2。下文介绍了完整的兼容性详细信息。
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 迁移指南所述。