Установить двойные оси в Tensorboard для двух разных графиков - PullRequest
1 голос
/ 16 мая 2019

Вот два примера:
1 отлично сработал, поскольку шкалы были одинаковыми:

import tensorflow as tf
from numpy import random

writer_1 = tf.summary.FileWriter("./logs/plot_1")
writer_2 = tf.summary.FileWriter("./logs/plot_2")

log_var = tf.Variable(0.0)
tf.summary.scalar("loss", log_var)

write_op = tf.summary.merge_all()

session = tf.InteractiveSession()
session.run(tf.global_variables_initializer())

for i in range(100):
    # for writer 1
    summary = session.run(write_op, {log_var: random.rand()})
    writer_1.add_summary(summary, i)
    writer_1.flush()

    # for writer 2
    summary = session.run(write_op, {log_var: random.rand()})
    writer_2.add_summary(summary, i)
    writer_2.flush()
    print(i)

Получил эту цифру, которая была понятна: good image

Но взглянем на второй случай, когда значения не укладываются в один и тот же диапазон.В этом случае мне нужно иметь две разные оси на одном графике, чтобы получить хорошее и понятное изображение.Проверьте код:

import tensorflow as tf
from numpy import random

writer_1 = tf.summary.FileWriter("./logs/plot_1")
writer_2 = tf.summary.FileWriter("./logs/plot_2")

log_var = tf.Variable(0.0)
tf.summary.scalar("loss", log_var)

write_op = tf.summary.merge_all()

session = tf.InteractiveSession()
session.run(tf.global_variables_initializer())

for i in range(100):
    # for writer 1
    summary = session.run(write_op, {log_var: i*10})
    writer_1.add_summary(summary, i)
    writer_1.flush()

    # for writer 2
    summary = session.run(write_op, {log_var: random.rand()})
    writer_2.add_summary(summary, i)
    writer_2.flush()
    print(i)

См. Полученное изображение:
bad image

Пожалуйста, помогите мне с этим вопросом.

1 Ответ

1 голос
/ 16 мая 2019

Вы не можете иметь две оси на одном графике, вам придется поместить значения в два разных графика.Это немного сложно, потому что графики определяются именем сводки, поэтому в вашем примере вам нужно будет создавать объекты сводки вручную.

import tensorflow as tf
from numpy import random

writer_1 = tf.summary.FileWriter("./logs/plot_1")
writer_2 = tf.summary.FileWriter("./logs/plot_2")

log_var = tf.Variable(0.0)

session = tf.InteractiveSession()
session.run(tf.global_variables_initializer())

for i in range(100):
    # for writer 1
    log1 = session.run(log_var, {log_var: i*10})
    summary1 = tf.train.Summary()
    summary1.value.add(tag='loss1', simple_value=log1)
    writer_1.add_summary(summary1, i)
    writer_1.flush()

    # for writer 2
    log2 = session.run(log_var, {log_var: random.rand()})
    summary2 = tf.train.Summary()
    summary2.value.add(tag='loss2', simple_value=log2)
    writer_2.add_summary(summary2, i)
    writer_2.flush()
    print(i)
...