【发布时间】:2019-02-19 18:18:40
【问题描述】:
我有一个我认为应该是一个简单的问题,但我似乎无法弄清楚。
假设我有这样的东西
with tf.Session(graph=self.training_graph) as sess:
init = tf.global_variables_initializer()
logger.info("initializing global variables")
sess.run(init)
# add the operations that distory input images according to the hyperparameters
self._setup_meta_training_tensors()
self._add_jpeg_decoding()
self._add_input_distortions()
evaluation_step, prediction = self._add_evaluation_step(
self.train_final_tensor, self.train_ground_truth_input)
self.merged = tf.summary.merge_all()
self.train_writer = tf.summary.FileWriter(os.path.join(
self.model.tensorboard_directory, 'train/'), sess.graph)
self.validation_writer = tf.summary.FileWriter(os.path.join(
self.model.tensorboard_directory, 'validation/'))
self.train_saver = tf.train.Saver()
for step in range(self.training_steps):
start = time.time()
train_bottlenecks, train_ground_truth = (
self._get_random_distorted_bottlenecks(sess,
self.training_batch_size,
self.IMAGE_CATEGORY_TRAINING,
self.train_bottleneck_tensor,
self.train_resized_input_tensor))
# Feed the bottlenecks and ground truth into the graph, and run a training
# step. Capture training summaries for TensorBoard with the `merged` op.
train_summary, _ = sess.run(
[self.merged, self.train_step],
feed_dict={self.train_bottleneck_input: train_bottlenecks,
self.train_ground_truth_input: train_ground_truth})
train_time = time.time() - start
self.train_writer.add_summary(train_summary, step)
is_last_step = (step + 1 == self.training_steps)
if (step % self.eval_step_interval) == 0 or is_last_step:
train_accuracy, cross_entropy_value = sess.run(
[evaluation_step, self.cross_entropy],
feed_dict={self.train_bottleneck_input: train_bottlenecks,
self.train_ground_truth_input: train_ground_truth})
validation_bottlenecks, validation_ground_truth, _ = (
self._get_random_bottlenecks(sess,
self.validation_batch_size,
self.IMAGE_CATEGORY_VALIDATION,
self.train_bottleneck_tensor,
self.train_resized_input_tensor))
validation_summary, validation_accuracy = sess.run(
[self.merged, evaluation_step],
feed_dict={self.train_bottleneck_input: validation_bottlenecks,
self.train_ground_truth_input: validation_ground_truth})
self.validation_writer.add_summary(validation_summary, step)
现在我的张量板正在跟踪与 self.training_graph 相关的各种变量 - 准确度、交叉熵、权重信息等等。
我想要做的就是在 tensorboard 上有另一个图表来跟踪每个训练步骤的平均运行时间。如果我为这一步计时(参见train_time),我如何将它们放入一个不断增加的数组中并在张量板上显示该图?
问题似乎是这些值不是我的主要模型图的一部分,它们是不同的值。如果我用一个简单的附加新运行时的新图表来制作它们,那么它们就不会出现在 tensorboard 中。我可以将它们从图表中分离出来,但这似乎很愚蠢。为什么我复杂的 ML 图表会有一个随机部分来计算平均训练迭代运行时间?
【问题讨论】:
-
你可以看看你的
global_step/sec,它基本上也跟踪你的进度和训练速度。这里的全局步骤是指每秒的批次数。