Tensorflow Hub:微调和评估

Tensorflow Hub: Fine-tune and evaluate

假设我想微调 Tensorflow Hub 图像特征向量模块之一。出现问题是因为为了微调一个模块,需要做以下事情:

module = hub.Module("https://tfhub.dev/google/imagenet/resnet_v2_50/feature_vector/3", trainable=True, tags={"train"})

假设模块是Resnet50

换句话说,导入模块时 trainable 标志设置为 True 并带有 train tag。现在,如果我想验证模型(对验证集进行推理以衡量模型的性能),我无法关闭批处理规范,因为 train tagtrainable旗帜。

请注意,此问题已在此处提出,但尚未提供任何答案。

我也提出了一个 Github issue about it 问题。

期待您的帮助!

对于 TF1 hub.Module,情况如您所说:训练图或推理图都已实例化,没有好的方法可以在单个 [= 中导入两者并在它们之间共享变量22=]。这是由 Estimators 和 TF1 中的许多其他训练脚本(尤其是分布式脚本)使用的方法得知的:有一个生成检查点的训练会话,以及一个从中恢复模型权重的单独评估会话。 (两者在读取的数据集和执行的预处理方面也可能有所不同。)

随着 TF2 及其对 Eager 模式的强调,这种情况发生了变化。 TF2 风格的 Hub 模块(在 https://tfhub.dev/s?q=tf2-preview) are really just TF2-style SavedModels 中找到,并且这些模块没有多个图形版本。相反,恢复的顶级对象上的 __call__ 函数采用可选的 training=...如果需要 train/inference 区分,则为参数。

有了这个,TF2 应该符合您的期望。请参阅交互式演示 tf2_image_retraining.ipynb and the underlying code in tensorflow_hub/keras_layer.py 以了解如何完成。 TF Hub 团队正在努力为 TF2 版本提供更完整的模块选择。