1

假设我想微调 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标志。

请注意,这个问题已经在这里被问过Tensorflow hub 微调和评估,但没有提供答案。

我还提出了一个关于它的 Github 问题

期待您的帮助!

4

1 回答 1

3

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

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

有了这个,TF2 应该符合你的期望。请参阅交互式演示tf2_image_retraining.ipynb和tensorflow_hub/keras_layer.py中的底层代码,了解如何完成。TF Hub 团队正在努力为 TF2 版本提供更完整的模块选择。

于 2019-07-29T08:36:23.300 回答