在我目前的项目中,我使用TF Hub图像模块和估算器来解决分类问题。根据TF Hub指南,我在训练模式下将标签设置为“训练” - 在Eval / Predict模式下设置为None。测试损失/准确性非常差,但训练损失不断减少。经过几天的调试后,我了解到,不知何时,集线器的训练模型权重没有被使用(似乎只有集线器外部的最后一个密集层被重用)。
要确认问题出在哪里我甚至没有通过“训练”标签进行训练(没有其他变化) - 问题立即得到解决。
感谢所有的帮助 - 非常感谢!
#inside model_fn
tags_val = None
if is_training:
tags_val = {"train"}
is_training = (mode == tf.estimator.ModeKeys.TRAIN)
tf_hub_model_spec = "https://tfhub.dev/google/imagenet/inception_v3/feature_vector/1"
img_module = hub.Module(tf_hub_model_spec, trainable=is_training, tags=tags_val)
#Add final dense layer, etc
答案 0 :(得分:0)
对于https://tfhub.dev/google/imagenet/inception_v3/feature_vector/1
,默认标签(意味着空集)和tags={"train"}
之间的区别在于后者在训练模式下操作批量规范(即,使用批次统计进行标准化)。如果这导致灾难性的质量损失,我的第一个怀疑是:UPDATE_OPS是否与train_op一起运行?
https://github.com/tensorflow/hub/issues/24在其他问题方面讨论了代码指针。