Tensorflow Hub + Estimator 潜在错误:训练后的权重未重用于评估/预测

Posted

技术标签:

【中文标题】Tensorflow Hub + Estimator 潜在错误:训练后的权重未重用于评估/预测【英文标题】:Tensorflow Hub + Estimator Potential Bug: Trained weights not reused for Evaluation/Prediction 【发布时间】:2018-11-08 09:29:49 【问题描述】:

在我当前的项目中,我使用 TF Hub 图像模块和估计器来解决分类问题。根据 TF Hub 指南,我在训练模式下将标签设置为“训练” - 在评估/预测模式下将标签设置为无。测试损失/准确性非常糟糕,但训练损失不断减少。经过几天的调试后,我了解到以某种方式没有使用集线器的训练模型权重(似乎只有集线器外部的最后一个密集层被重用)。

为了确认问题出在哪里,我什至在训练时都没有传递“train”标签(没有其他更改)——问题立即得到解决。

感谢所有帮助 - 非常感谢!

#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

【问题讨论】:

【参考方案1】:

对于https://tfhub.dev/google/imagenet/inception_v3/feature_vector/1,默认标签(即空集)和tags="train"之间的区别在于后者在训练模式下操作批量规范(即使用批量统计进行归一化)。如果这导致灾难性的质量损失,我的第一个怀疑是:UPDATE_OPS 是否与 train_op 一起运行?

https://github.com/tensorflow/hub/issues/24 在其他问题的一边用代码指针讨论了这一点。

【讨论】:

对不起,我花了一点时间来测试。我在您提到的 github 线程中尝试了解决方案 - 使用 tf.contrib.training.create_train_op 并不能解决我的问题。我可以尝试其他任何指针吗?

以上是关于Tensorflow Hub + Estimator 潜在错误:训练后的权重未重用于评估/预测的主要内容,如果未能解决你的问题,请参考以下文章

TensorFlow Hub 模块可以在 TensorFlow 2.0 中使用吗?

如何使用TensorFlow Hub和代码示例

如何使 TensorFlow Hub 模型为 TensorFlow Serving REST 请求做好准备(使用 base64 编码图像)?

tensorflow_hub实现风格迁移

Jupyter notebook Import tensorflow_hub error: No module named tensorflow.python.training.tracking

利用 TensorFlow Hub 中的预处理模型简化 BERT