TF Hub 模型格式
TF Hub 提供可重用的模型片段,这些片段可以加载回来,构建其上,并可能在 TensorFlow 程序中重新训练。它们有两种不同的格式
- 自定义 TF1 Hub 格式 。它的主要用途是在 TF1(或 TF2 中的 TF1 兼容模式)中通过其 hub.Module API 使用。完整的兼容性详细信息 如下。
- 本机 TF2 SavedModel 格式。它的主要用途是在 TF2 中通过 hub.load 和 hub.KerasLayer API 使用。完整的兼容性详细信息 如下。
模型格式可以在 tfhub.dev 上的模型页面上找到。模型的 **加载/推理**、**微调** 或 **创建** 可能不支持 TF1/2,具体取决于模型格式。
TF1 Hub 格式的兼容性
操作 | TF1/ TF2 中的 TF1 兼容模式 [1] | TF2 |
加载/推理 | 完全支持(完整的 TF1 Hub 格式加载指南)m = hub.Module(handle)
outputs = m(inputs)
|
建议使用 hub.loadm = hub.load(handle)
outputs = m.signatures["sig"](inputs) 或 hub.KerasLayerm = 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.loadm = hub.load(handle)
outputs = m(inputs) 或 hub.KerasLayerm = hub.KerasLayer(handle)
outputs = m(inputs)
|
完全支持(完整的 TF2 SavedModel 加载指南)。使用 hub.loadm = hub.load(handle)
outputs = m(inputs) 或 hub.KerasLayerm = 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.loadm = hub.load(handle)
outputs = m(inputs, training=is_training) 或 hub.KerasLayerm = 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 迁移指南 中所述。