2017-04-21 35 views
0

有沒有一種方法可以同時繪製兩個不同網絡的訓練損失?TensorBoard - 在同一圖表上同時訓練的2個網絡的繪圖損失

目前,我使用兩個FileWriter和摘要保存到兩個不同的目錄:

writer_cnn = tf.summary.FileWriter(os.path.join('log', 'cnn')) 
writer_dann = tf.summary.FileWriter(os.path.join('log', 'dann')) 
s_loss_cnn = tf.summary.scalar('loss_class', loss_class_cnn) 
s_loss_dann = tf.summary.scalar('loss_class', loss_class_dann) 

而且在後面的代碼:

s_cnn = sess.run(s_loss_cnn, feed_dict=feed_batch) 
s_dann = sess.run(s_loss_dann, feed_dict=feed_batch) 
writer_cnn.add_summary(s_cnn, global_step) 
writer_dann.add_summary(s_dann, global_step) 

但是當我火TensorBoard我得到兩個不同的圖表loss_classloss_class_1。我讀過herethere等不同的地方,創建兩個目錄是最好的選擇。我錯過了什麼嗎?

+1

在你引用的例子中,_same_丟失被寫入兩個不同的目錄。在這裏,你有兩種不同的損失。 – user1735003

+0

@ user1735003任何想法如何我可以在同一個情節中繪製這兩個不同的損失呢? – Leo

+0

https://github.com/tensorflow/tensorflow/issues/7089#issuecomment-280506195提到了一種方式,雖然看起來有點脆弱。 – user1735003

回答

0

您沒有包含您的代碼,但我懷疑您的問題是因爲您將所有操作添加到同一圖形(默認圖形)。

嘗試創建單獨的圖形並將它們添加到您的writer(圖形參數)

事情是這樣的:

def graph1(): 
    g1 = tf.Graph() 
    with g1.as_default() as g: 
     # define your ops 
    with tf.Session(graph = g) as sess: 
     # do all the stuff and write the writer 

創建一個類似的功能graph2(),然後調用它們。

+0

如果我錯了,糾正我,但這意味着我不會同時訓練兩個網絡嗎?我會用tf.Session(graph = g1)作爲sess:#do first training' then'with tf.Session(graph = g2)as sess:#do second training'? – Leo

+0

@Leo是的,你是對的。我不知何故錯過了那部分。但是如果你將東西添加到同一個默認圖表中,TB將顯示這個圖表,無論你直接寫入它 –

+0

你是指實際的圖表表示?因爲我真的不關心它。儘管如此,我從你所說的話中得出的結論是,如果我在同一個圖中使用同名的兩個摘要,那麼就沒有辦法繪製兩個標量,因爲TF會重命名第二個變量。它是否正確?是否有解決方法? (除了分割圖表和會話。) – Leo

相關問題