2017-04-21 195 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

相关问题