您如何编辑现有的Tensorboard Training Loss摘要?

亚历克斯

我已经训练了我的网络并产生了一些训练/验证损失,这些损失通过下面的代码示例保存(仅训练损失示例,验证完全等效):

valid_summary_writer = tf.summary.create_file_writer("/path/to/logs/")
with train_summary_writer.as_default():
    tf.summary.scalar('Training Loss', data=epoch_loss, step=current_step)

训练后,我想使用Tensorboard查看损耗曲线。但是,由于我将损耗曲线保存为“ Training Loss”和“ Validation Loss”,因此这些曲线分别绘制在单独的图形上。我知道我应该将名称更改为简单的“丢失”以解决此问题,以备将来写入日志目录时使用。但是,如何针对培训/验证损失来编辑现有日志文件以解决此问题?

我试图修改以下帖子的解决方案:https : //stackoverflow.com/a/55061404,它可以编辑日志文件的步骤并重新写入文件;我的版本涉及更改文件中的标记。但是我在这方面没有成功。它还需要通过'tf.compat.v1'导入较旧的Tensorflow代码。有没有办法做到这一点(也许在TF 2.X中)?

我曾想过简单地从每个包含损耗的日志目录中获取损耗和步长值,然后通过以前的工作方法将它们写入新的日志文件中,但是我只能设法获取步长,而不是损耗值本身。有人在这里有成功吗?

--- ===编辑=== ---

我设法使用@jhedesa中的代码解决了问题

我必须稍微改变函数“ rename_events_dir”的调用方式,因为我是在Google Colab Notebook中协同使用Tensorflow的。为此,我更改了代码的最后部分:

if __name__ == '__main__':
    if len(sys.argv) != 5:
        print(f'{sys.argv[0]} <input dir> <output dir> <old tags> <new tag>',
              file=sys.stderr)
        sys.exit(1)
    input_dir, output_dir, old_tags, new_tag = sys.argv[1:]
    old_tags = old_tags.split(';')
    rename_events_dir(input_dir, output_dir, old_tags, new_tag)
    print('Done')

要阅读此内容:

rootpath = '/path/to/model/'
dirlist = [dirname for dirname in os.listdir(rootpath) if dirname not in ['train', 'valid']]
for dirname in dirlist:
  rename_events_dir(rootpath + dirname + '/train', rootpath + '/train', 'Training Loss', 'loss')
  rename_events_dir(rootpath + dirname + '/valid', rootpath + '/valid', 'Validation Loss', 'loss')

请注意,我两次调用了“ rename_events_dir”,一次用于编辑训练损失的标签,一次用于验证损失的标签。我可以通过设置“ old_tags ='Training Loss; Validation Loss'”并使用“ old_tags = old_tags.split(';')”来拆分标签来使用以前的代码调用方法。我使用我的方法只是为了了解代码及其如何处理数据。

Jdehesa

如何在Tensorboard中加载选定范围的样本中所述,TensorBoard事件实际上是存储的记录文件,因此您可以读取它们并对其进行处理。这是一个与此处发布的脚本类似的脚本,但用于重命名事件,并已更新为可在TF 2.x中使用。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# rename_events.py

import sys
from pathlib import Path
import os
# Use this if you want to avoid using the GPU
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
import tensorflow as tf
from tensorflow.core.util.event_pb2 import Event

def rename_events(input_path, output_path, old_tags, new_tag):
    # Make a record writer
    with tf.io.TFRecordWriter(str(output_path)) as writer:
        # Iterate event records
        for rec in tf.data.TFRecordDataset([str(input_path)]):
            # Read event
            ev = Event()
            ev.MergeFromString(rec.numpy())
            # Check if it is a summary
            if ev.summary:
                # Iterate summary values
                for v in ev.summary.value:
                    # Check if the tag should be renamed
                    if v.tag in old_tags:
                        # Rename with new tag name
                        v.tag = new_tag
            writer.write(ev.SerializeToString())

def rename_events_dir(input_dir, output_dir, old_tags, new_tag):
    input_dir = Path(input_dir)
    output_dir = Path(output_dir)
    # Make output directory
    output_dir.mkdir(parents=True, exist_ok=True)
    # Iterate event files
    for ev_file in input_dir.glob('**/*.tfevents*'):
        # Make directory for output event file
        out_file = Path(output_dir, ev_file.relative_to(input_dir))
        out_file.parent.mkdir(parents=True, exist_ok=True)
        # Write renamed events
        rename_events(ev_file, out_file, old_tags, new_tag)

if __name__ == '__main__':
    if len(sys.argv) != 5:
        print(f'{sys.argv[0]} <input dir> <output dir> <old tags> <new tag>',
              file=sys.stderr)
        sys.exit(1)
    input_dir, output_dir, old_tags, new_tag = sys.argv[1:]
    old_tags = old_tags.split(';')
    rename_events_dir(input_dir, output_dir, old_tags, new_tag)
    print('Done')

您可以这样使用它:

> python rename_events.py my_log_dir renamed_log_dir "Training Loss;Validation Loss" loss

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Tensorboard:如何查看模型摘要?

来自分类Dev

如何在vim中编辑现有的键映射?

来自分类Dev

如何计算摘要

来自分类Dev

TensorFlow 2.0 Keras:如何为TensorBoard编写图像摘要

来自分类Dev

Laravel编辑现有的pdf

来自分类Dev

在iOS中编辑现有的plist

来自分类Dev

是否有 Logback 摘要器?

来自分类Dev

如何使用Android进行摘要?

来自分类Dev

如何创建对象列表的摘要?

来自分类Dev

如何检索DBpedia资源的摘要?

来自分类Dev

如何获得科学格式的摘要

来自分类Dev

如何获得正确的分析摘要?

来自分类Dev

如何使用Android进行摘要?

来自分类Dev

如何覆盖EXTJS摘要的总和?

来自分类Dev

您如何在Chrome Native Client中使用现有的C库?

来自分类Dev

如何在Github桌面中编辑旧提交的摘要

来自分类Dev

如何编辑 R S4 Object 摘要的代码?

来自分类Dev

您如何隐藏用户不拥有的内容的编辑和删除按钮

来自分类Dev

如何通过Google脚本编辑现有的Google表单项

来自分类Dev

如何通过Google脚本编辑现有的Google表单项

来自分类Dev

Tiff 编辑:如何将文本添加到现有的 tif 文件?

来自分类Dev

如何使用 groovy 编辑现有的 excel 表,而无需创建相同 excel 的副本

来自分类Dev

加载您自己的SecurityManager或禁用现有的

来自分类Dev

如何编辑现有量度?

来自分类Dev

您如何使用Chrome驱动程序和所有现有的浏览器Cookie启动Selenium?

来自分类Dev

编辑现有的Excel文件C#npoi

来自分类Dev

使用zen编码片段编辑现有的html

来自分类Dev

从外部js文件编辑现有的Google地图

来自分类Dev

您如何将现有的核心数据iOS 7应用程序的数据迁移到iCloud?

Related 相关文章

热门标签

归档