Я обучил свою сеть и сгенерировал некоторые потери при обучении / проверке, которые я сохранил с помощью следующего примера кода (пример только потери при обучении, проверка совершенно эквивалентна):
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. Однако, поскольку я сохранил кривые потерь под именами «Потеря обучения» и «Потеря проверки», эти кривые построены на отдельных графиках. Я знаю, что мне нужно изменить имя на «потеря», чтобы решить эту проблему для будущих записей в каталог журналов. Но как мне отредактировать мои существующие файлы журналов для потерь обучения / проверки, чтобы учесть это?
Я попытался изменить решение следующего поста: { ссылка }, которое редактирует шаги файл журнала и перезаписывает файл; где моя версия предполагает изменение тегов в файле. Но у меня не было успеха в этой области. Также требуется импортировать старый код Tensorflow через tf.compat.v1. Есть ли способ добиться этого (возможно, в TF 2.X)?
Я думал просто получить значения потерь и шагов из каждого каталога журналов, содержащего потери, и записать их в новые файлы журналов через мой предыдущий метод работы, но мне удалось получить только шаг, а не само значение потери. У кого-нибудь здесь был какой-либо успех?
--- === РЕДАКТИРОВАТЬ === ---
Мне удалось решить проблему, используя код из @ jhedesa
Мне пришлось немного изменить способ вызова функции "rename_events_dir", так как я использую Tensorflow совместно в ноутбуке Google Colab. Чтобы сделать это, я изменил последнюю часть кода, которая гласила:
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 (';')" для разделения тегов. Я использовал свой метод просто, чтобы понять код и то, как он обрабатывает данные.