假设我要微调Tensorflow Hub图像特征向量模块之一。出现问题是因为要微调模块,需要执行以下操作:
getconf PAGE_SIZE
假定模块为module = hub.Module("https://tfhub.dev/google/imagenet/resnet_v2_50/feature_vector/3", trainable=True, tags={"train"})
。
换句话说,导入模块时将Resnet50
标志设置为trainable
,并使用True
。现在,如果我想验证模型(对验证集进行推断以衡量模型的性能),由于train tag
和{{ 1}}标志。
请注意,这里Tensorflow hub fine-tune and evaluate已经有人问过这个问题,但没有提供答案。
期待您的帮助!
答案 0 :(得分:2)
对于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.ipynb和tensorflow_hub/keras_layer.py中的基础代码。 TF Hub团队正在努力为TF2版本提供更完整的模块选择。