【问题标题】:validation during training of EstimatorEstimator 训练期间的验证
【发布时间】:2018-08-13 23:02:17
【问题描述】:

不推荐使用 TensorFlow r1.3 监视器:

"2016-12-05", “监视器已弃用。请使用 tf.train.SessionRunHook。”) 并且 Estimator.train(input_fn,hooks,..) 仅适用于钩子。

如何用钩子实现验证监视器的功能?

【问题讨论】:

  • 你认为哪个版本是“当前”的?
  • TensorFlow r1.3,但问题始于 TensorFlow 1.2

标签: tensorflow


【解决方案1】:

编辑:正如 cmets 中指出的那样,这感觉是正确的做法,但是 每次评估时都会重新初始化权重,这使得它几乎没用的……


我最终能够使用train_and_evaluate 函数监控我的验证错误(我理解您正在尝试这样做)。您必须使用的EvalSpec 对象具有参数start_delay_secsthrottle_secs,用于定义计算误差(或您在估算器的EVAL 模式中定义的任何值)的频率。

我的代码看起来有点像

classifier = tf.estimator.Estimator(
    model_fn=model_fn,
    model_dir=model_dir,
    params=params)

train_spec = tf.estimator.TrainSpec(
    input_fn = input_fn,
)

eval_spec = tf.estimator.EvalSpec(
    input_fn = valid_input_fn,
    throttle_secs=120,
    start_delay_secs=120,
)

tf.estimator.train_and_evaluate(
    classifier,
    train_spec,
    eval_spec
)

【讨论】:

  • 嗨 simlmx,我们尝试了同样的方法,但似乎在钩子触发时,每次评估的网络都会重新加载初始权重。你有同样的经历吗?理想情况下,我们希望在不重新加载任何内容的情况下使用当前权重评估网络,只需更改 input_fn。
  • 你说的完全正确,我也经历过同样的事情。我不确定,但我认为它不是从初始权重重新开始,而是从上次保存时开始。我试图通过更频繁地保存模型来解决这个问题,这样问题就不会那么糟糕了,但我最终完全厌倦了Estimators,并回到了更“经典”的tensorflow
【解决方案2】:

我一直在使用SummarySaverHook 而不是监视器。它们还没有“那么强大”,培训材料也没有更新,说明如何准确地复制 Monitor 功能。

这是我的使用方法:

summary_hook = tf.train.SummarySaverHook(
    save_steps=SAVE_EVERY_N_STEPS,
    output_dir='./tmp/rnnStats',
    scaffold=tf.train.Scaffold(),
    summary_op=tf.summary.merge_all())

print("Classifier.train")
classifier.train(input_fn=train_input_fn, steps=1000, hooks=[summary_hook])

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-12-03
  • 1970-01-01
  • 1970-01-01
  • 2018-10-26
  • 1970-01-01
  • 2019-01-20
  • 2021-08-08
  • 1970-01-01
相关资源
最近更新 更多