Tensorflow Hub进行微调和评估

时间:2018-12-19 10:26:42

标签: python tensorflow tensorflow-hub

我想使用tensorflow集线器,在我的图中重新训练其模块之一,然后使用该模块,但是我的问题是,当我设置trainable = Truetags = {"train"}来创建模块时,我可以由于批次归一化层,因此不进行评估。 因此,当我阅读此问题时,我发现我还应该在不设置tags = {"train"}的情况下创建另一个图形进行评估。但我不知道如何将训练图的变量还原为评估图。我尝试使用相同的名称创建两个模块,并在评估图中使用reuse = True,但这没有帮助。

您能帮我吗? @arnoegw

1 个答案:

答案 0 :(得分:0)

为了社区的利益,指定Arno在“答案”部分中引用的解决方案(即使它在“注释”部分中也存在)。

答案是

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

借助TF2及其对“急切”模式的强调,这种情况已经改变。 TF2样式的集线器模块(在https://tfhub.dev/s?q=tf2-preview中找到)实际上只是TF2-style SavedModels,并且它们没有多个图形版本。相反,如果需要训练/推理区别,则在还原的顶级对象上的 call 函数采用可选的training = ...参数。

有了这个,TF2应该符合您的期望。有关如何实现的信息,请参见交互式演示tf2_image_retraining.ipynbtensorflow_hub/keras_layer.py中的基础代码。 TF Hub团队正在努力为TF2版本提供更完整的模块选择。