【问题标题】:how to track percentage complete and average training iteration runtime in tensorboard?如何在 tensorboard 中跟踪完成百分比和平均训练迭代运行时间?
【发布时间】: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,它基本上也跟踪你的进度和训练速度。这里的全局步骤是指每秒的批次数。

标签: tensorflow tensorboard


【解决方案1】:

我会使用像 https://github.com/lanpa/tensorboardX 这样的辅助库,它可以抽象出烦人的额外会话调用。

【讨论】:

    猜你喜欢
    • 2022-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 2022-06-17
    • 1970-01-01
    • 2020-09-01
    相关资源
    最近更新 更多