Tensorflow hub 微调和评估

Tensorflow hub fine-tune and evaluate

我想使用 tensorflow hub,在我的图表中重新训练它的一个模块,然后使用该模块,但我的问题是当我设置 trainable = Truetags = {"train"} 来创建模块时,由于批量归一化层,我无法进行评估。 所以当我读到这个问题时,我发现我还应该创建另一个图表进行评估而不设置 tags = {"train"}。但我不知道如何将训练图中的变量恢复到评估图中。我尝试用相同的名称创建两个模块并在评估图中使用 reuse = True,但这没有帮助。

为了社区的利益,在回答部分指定 Arno 引用的解决方案(即使它出现在评论部分)。

答案是:

对于 TF1 hub.Module,情况如您所说:训练图或推理图都已实例化,没有好的方法可以在单个 [= 中导入两者并在它们之间共享变量26=]。这是由 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 版本提供更完整的模块选择。