2017-04-21 8 views
0

2つの異なるネットワークの訓練損失を同時に訓練する方法はありますか?TensorBoard - 2つのネットワークからのプロット損失が同じグラフ上で同時に訓練された

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) 

以降のコードで:私は2 FileWriterを使用し、二つの異なるディレクトリに要約を保存する瞬間

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を発射するとき、私は別の2を取得グラフloss_classおよびloss_class_1。私はherethereのような別の場所で2つのディレクトリを作成する方法を読んだことがあります。何か不足していますか?

+1

引用した例では、_same_ lossは2つの異なるディレクトリに書き込まれます。ここでは、あなたは_two different_損失を持っています。 – user1735003

+0

@ user1735003どのように私は同じプロットでそれらの2つの異なる損失をプロットすることができますか? – Leo

+0

https://github.com/tensorflow/tensorflow/issues/7089#issuecomment-280506195には方法が記載されていますが、少し脆いようです。 – user1735003

答えて

0

あなたのコードは含まれていませんが、すべての操作を同じグラフ(デフォルトのグラフ)に追加していることが原因であると思われます。同様の機能graph2()を作成し、それらを呼び出す

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 

は、別々のグラフを作成し、writer(グラフパラメータ)にそれらを追加するには、このような

何かを試してみてください。

+0

私が間違っていたら私を訂正してください。しかし、これは私がもう両方のネットワークを同時に訓練しないことを意味しますか?私はtf.Session(グラフ= g1)をsess:#do first trainingとし、tf.Session(graph = g2)をsess:#do second training'とします。 – Leo

+0

@レオはい、そうです。私は何とかその部分を逃した。しかし、あなたが同じデフォルトグラフに物事を加えるならば、TBは直接あなたがそれを書こうとしているにかかわらずこのグラフを表示します –

+0

実際のグラフ表現を意味しますか?私は本当に気にしないので。あなたが言っていることから私が得ることは、同じグラフに同じ名前の2つのサマリを置くと、TFが2番目の変数の名前を変更するので、両方のスカラーをプロットする方法がないということです。これは正しいです?回避策はありますか? (グラフとセッションを分割することを除いて) – Leo

関連する問題