Tensorboard scalar plotting with epoch number on the horizontal axis
Question:
I am new to TensorFlow, and I recently started to play around a little bit with data visualization using Tensorboard.
I was wondering if it is possible to convert the horizontal axis of the monitoring scalars (I monitor accuracy and loss on train and validation) to show epoch number instead of iteration number.
the only way I can think of how to do it is to change the sampling frequency to one per epoch, but I am interested in keeping the original sampling resolution.
is there a better way?
Answers:
Yes, you can do this by passing the epoch number to the global_step
parameter of the add_summary()
method:
summary_writer = tf.summary.FileWriter(log_dir)
my_summary = session.run(my_summary_op, feed_dict)
summary_writer.add_summary(my_summary, global_step=epoch_number)
One workaround is using add_scalars()
.
writer = SummaryWriter()
for idx_epoch in range(epochs):
for idx_batch in range(batches):
# fetch data
data, target = None, None
# compute loss
loss = nn.L1Loss(data, target)
# backward propagation
global_step = idx_epoch*batches+idx_batch
writer.add_scalars('loss', {'batch':loss}, global_step)
writer.add_scalars('loss', {'epoch':loss}, global_step)
Note that these codes are actually pseudo codes, which means they cannot run.
Notice that there is a loss writing for every batch as well as every epoch.
Then the tensorboard result will look like this:

Red line records the loss every epoch, while blue line records batchly.
I am new to TensorFlow, and I recently started to play around a little bit with data visualization using Tensorboard.
I was wondering if it is possible to convert the horizontal axis of the monitoring scalars (I monitor accuracy and loss on train and validation) to show epoch number instead of iteration number.
the only way I can think of how to do it is to change the sampling frequency to one per epoch, but I am interested in keeping the original sampling resolution.
is there a better way?
Yes, you can do this by passing the epoch number to the global_step
parameter of the add_summary()
method:
summary_writer = tf.summary.FileWriter(log_dir)
my_summary = session.run(my_summary_op, feed_dict)
summary_writer.add_summary(my_summary, global_step=epoch_number)
One workaround is using add_scalars()
.
writer = SummaryWriter()
for idx_epoch in range(epochs):
for idx_batch in range(batches):
# fetch data
data, target = None, None
# compute loss
loss = nn.L1Loss(data, target)
# backward propagation
global_step = idx_epoch*batches+idx_batch
writer.add_scalars('loss', {'batch':loss}, global_step)
writer.add_scalars('loss', {'epoch':loss}, global_step)
Note that these codes are actually pseudo codes, which means they cannot run.
Notice that there is a loss writing for every batch as well as every epoch.
Then the tensorboard result will look like this:
Red line records the loss every epoch, while blue line records batchly.