2017-07-13 50 views
8

我想一些TensorBoard記錄添加到使用新的API tf.estimator的典範。Tensorflow - 使用tf.summary 1.2估算API

我有一個鉤設置像這樣:

summary_hook = tf.train.SummarySaverHook(
    save_secs=2, 
    output_dir=MODEL_DIR, 
    summary_op=tf.summary.merge_all()) 

# ... 

classifier.train(
    input_fn, 
    steps=1000, 
    hooks=[summary_hook]) 

在我model_fn,我也創建一個summary -

​​

然而,當我運行此代碼,我得到以下錯誤來自summary_hookExactly one of scaffold or summary_op must be provided.這可能是因爲tf.summary.merge_all()未找到任何摘要並且正在返回None,儘管有tf.summary.scalar我在model_fn中宣佈。

任何想法,爲什麼這將無法正常工作?

回答

3

使用tf.train.Scaffold()並通過tf.merge_all如下

summary_hook = tf.train.SummarySaverHook(
    save_secs=2, 
    output_dir=MODEL_DIR, 
    scaffold=tf.train.Scaffold(summary_op=tf.summary.merge_all())) 
+1

我有幾乎相同的代碼結構,但我得到了以下錯誤:「類型錯誤:獲取參數具有無效類型,必須是字符串或張量。 (不能將腳手架轉換爲張量或操作。)「任何想法爲什麼它不工作?謝謝! – EXP0

+0

在Tensorflow的新版本中,如果您將鉤子傳遞給」評估「,但不適用於」火車「,則此工作正常。對於列車只需要在'mode_fn'定義總結,他們將被自動記錄到tensorboard。(是的,我也覺得這是愚蠢的和違反直覺) – GPhilo

2

只是爲了誰在未來這個問題,所選擇的解決方案並沒有爲我工作(見我的意見在選擇解決方案)。

事實上,與TF 1.2估算API,一個並不需要有summary_hook。我只需在model_fn中有tf.summary.scalar("loss", loss),然後在沒有summary_hook的情況下運行代碼。損失被記錄並顯示在張量板上。我不確定在這個和類似的問題之後,TF API是否被更改過。

+1

估計API訓練過程中不自動處理的總結。但我想在評估過程中看到相同的總結,但是這並沒有發生 – 4dan

+0

只要你把他的摘要放在'model_fn'中就行了,如果你想在'input_fn'中總結一些東西呢?(例如,檢查數據增加通過記錄圖像) – GPhilo

0

與Tensorflow VER-R1.3

添加您彙總OPS在你的估計model_fn

例如:

tf.summary.histogram(tensorOp.name, tensorOp) 

如果你覺得編寫會議紀要可能消耗的時間和空間,你可以控制摘要的寫作頻率,在您的估算器中run_config

run_config = tf.contrib.learn.RunConfig() 
run_config = run_config.replace(model_dir=FLAGS.model_dir) 
run_config = run_config.replace(save_summary_steps=150) 

注:這將影響TensorBoard記錄了全面總結作家的頻率,你的估計(tf.estimator.Estimator

+0

但是這不適用於評估。 – GPhilo