【问题标题】:Can I delete events.out.tfevents.XXXXXXXXXX.computer_name files from training folder我可以从培训文件夹中删除 events.out.tfevents.XXXXXXXXXX.computer_name 文件吗
【发布时间】:2018-11-28 10:57:56
【问题描述】:

我正在训练 faster_rcnn_inception 模块以在自定义数据集上进行对象检测。 在 training 目录中,我们找到了 eval_0 文件夹和 tensorflow 生成的 events.out.tfevents.xxxxxx 文件。

培训目录结构如下

+training_dir
    +eval_0
     -events.out.tfevents.1542309785.instance-1  1.2GB
     -events.out.tfevents.1542367255.instance-1  5.3GB
     -events.out.tfevents.1542369886.instance-1  3.6GB
     -events.out.tfevents.1542624154.instance-1  31MB
     -events.out.tfevents.1543060258.instance-1  19MB
     -events.out.tfevents.1543066775.instance-2  1.6GB
 -events.out.tfevents.1542308099.instance-1  17MB
 -events.out.tfevents.1542308928.instance-1  17MB
 -events.out.tfevents.1542366369.instance-1  17MB
 -events.out.tfevents.1542369000.instance-1  17MB
 -events.out.tfevents.1542623262.instance-1  17MB
 -events.out.tfevents.1543064936.instance-2  17MB
 -events.out.tfevents.1543065796.instance-2  17MB
 -events.out.tfevents.1543065880.instance-2  17MB
 -model.ckpt-96004.data-00000-of-00001
 -model.ckpt-96004.data-00000-of-00001
 -model.ckpt-96004.index
 -model.ckpt-96004.meta
 -model.ckpt-96108.data-00000-of-00001
 -model.ckpt-96108.index
 -model.ckpt-96108.meta

据我了解,eval_0 文件夹中的 tfevents 文件是 evaluation 的摘要文件和 training_dir 中的 tfevents 文件> 是培训的摘要文件。

我已多次中断训练过程并从最近的检查点继续。 我也了解重新启动训练过程会生成新的 tfevents 文件。

我的问题如下:

  • 为什么训练 tfevents_files 具有相同的大小,但如果 eval_0/tfevents_files 大小不同

  • 为什么中断训练会在训练中生成新的 tfevents_file 文件夹,但在 eval_0 的情况下未观察到相同的情况?

  • 我可以删除 eval_0 中的所有 tfevents 文件,除了最新的文件吗?可以 对训练或进化历史有影响吗?

【问题讨论】:

    标签: ubuntu tensorflow tensorboard


    【解决方案1】:

    tfevents 文件对于训练不是必需的,可以安全删除。

    在 Tensorflow 中 tfevents 由 FileWriters 创建,通常用于存储摘要输出。以下是一些如何使用 tf.summaries 的常见示例:

    • 在训练开始前存储张量流图的描述
    • 为每个训练步骤编写损失函数的值
    • 为每个 epoch 存储一次层的激活或权重的直方图
    • 在每次验证时存储一次网络输出图像的示例
    • 存储整个验证集的平均精度(或任何其他指标)

    此信息对于培训不是必需的,因此可以删除。然而,它对于调试或研究模型的行为可能会派上用场。 TensorBoard 是读取和可视化存储在 tfevent 文件中的数据的最常用工具。任何人都可以使用 protobuf 协议手动读取和解释 TFRecord 文件,该协议适用于 Python、C++ 等。

    tfevents 以 TFRecord 格式编写。 TFRecord 是一种用于存储二进制记录序列的简单格式。如果文件已经存在,Tensorflow 总是将新的事件/摘要附加到文件的末尾。这解释了文件的增长。

    由于 tensorflow/models/reserach/object_detection 提供的优化例程的实施细节,训练和评估事件文件具有不同的行为。也就是说,评估事件文件是直接使用 FileWriter 创建的,只要存在,它将重用 log_dir 中最新的现有事件文件。实施还具有定期收集的大量摘要,这增加了培训期间的事件文件。

    另一方面,对于训练例程,开发人员在TPU 上完成训练时明确指定一个空的摘要列表。这意味着事件文件只创建一次,之后就不再使用。在非 TPU 硬件上执行训练或为训练启用 summarize_gradients 选项时,此行为可能会有所不同。

    【讨论】:

    • @t.selivonchyk 你能详细说明一下 training_dir 文件夹中的 tfevent 文件吗?
    • @ANDY_VAR 通常,当我们设置训练摘要时,它们会定期收集。例如,每个批次的损失值都会被记录并写入事件文件,这会改变它的大小。根据您使用的代码,开发人员专门将训练摘要集合设置为空列表。这意味着不会收集任何摘要,并且包含的​​唯一信息文件是在创建事件文件期间写入的。它通常只是图结构,无论何时开始训练,它都保持不变。因此,这些文件大小相同。
    【解决方案2】:

    TFEvent 文件主要由 TensorBoard 使用。如果您打开终端并启动它(即:tensorboard --logdir .),您会在这些事件文件中找到您看到的内容。

    当然,您可以拥有多个“摘要作者”。在您的情况下,训练期间记录的事件记录在根“training_dir”中,而来自 eval 阶段的事件则放在“eval_0”下。你会想要这样做,因为 tensorboard 在图表中将每个文件夹绘制为一个单独的组。

    您的训练数据与评估数据不同,因此事件文件当然也会不同。

    至于检查点,您只需要model.ckpt* 文件即可恢复权重。事件文件根本不使用,因此您可以安全地删除它们。实际上,如果您确实打算使用 tensorboard,那么无论何时开始新的训练过程,您都可能希望从一个干净的日志文件夹开始。

    事件文件实际上并不是检查点的一部分,它们是日志文件。因此,每当调用日志记录方法时,都会添加新条目。您在 eval_0 文件夹中看不到新条目,这可能是因为您在训练阶段(在评估阶段之前)停止了该过程。

    【讨论】:

    • 很好的解释。但是你能详细说明training_dir中相同大小的tfevent文件吗?我了解评估阶段有更多关于我的样本集和结果相关数据的信息。但是位于 training_dir 文件夹中的文件呢?
    猜你喜欢
    • 1970-01-01
    • 2023-01-04
    • 2018-11-14
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    • 2017-02-19
    • 1970-01-01
    相关资源
    最近更新 更多