好记性不如烂笔头,纯粹为自己的学习生活记录点什么!

tensorboard 同时显示多个模型准确率和损失率
tensorboard 同时显示多个模型的accuracy和loss

Found more than one graph event per run, or there was a metagraph containing a graph_def, as well as one or more graph events. Overwriting the graph with the newest event.

在利用TensorFlow模型训练过程中,我们都知道使用tensorboard进行训练过程中的acc和loss可视化,便于我们观察训练过程中是否出现问题。但是训练的时候我常发现只能在一个loss曲线图中显示一个loss,本文将给出两种方法,如何显示多个模型的训练acc和loss,便于对比分析!!

先上图!省的你们不知道实现的结果是啥!

深度学习的loss和acc曲线 loss与acc_tensorboard

错误提示

本文的初衷都是从下面这个错误开始!

Found more than one graph event per run, or there was a metagraph containing a graph_def, as well as one or more graph events.  Overwriting the graph with the newest event.

比如,你在log文件下存在两个events.out.tfevents.******,目录如下:

-logs
	--events.out.tfevents.1
	--events.out.tfevents.2

当命令行模式cd到logs下,执行

tensorboard --logdir=./

表示在当前目录下显示tensorboard,这时就会报Found more than one graph event per run…错误,这是因为tensorboard运行目录下必须只能有一个tfevents文件。

Tensorboard

那么如何在一个tensorboard中显示多个模型的结果呢?
直奔主题!!
首先你的目录格式必须如下:

-logs
	--1
		---events.out.tfevents.1
	--2
		---events.out.tfevents.2
	--3
		---events.out.tfevents.3
	........
	........

接下来你要在命令行中cd到logs文件夹下,然后在执行tensorboard命令:

深度学习的loss和acc曲线 loss与acc_同时显示多个模型训练结果_02

logs文件夹下存在7个子文件夹,每一个子文件夹下只保存一个tfevents文件!!!

ctrl+鼠标左键单击http://xxxx:6006,打开浏览器如下图:

深度学习的loss和acc曲线 loss与acc_同时显示多个模型训练结果_03


bingo!!!搞定了 !!!

左下角显示的就是logs下的各个文件夹名称,并自动分配不同颜色,可以单击选中或不选中其中任何几个让其显示或不显示,我简单演示了一下,取消1的效果。

手撸代码实现

tensorboard有一个很大的问题是,无法添加标注,这个图没法放在论文中,这可咋整捏?

直接开干!

首先我们要获取数据,数据来源于tensorboard中

深度学习的loss和acc曲线 loss与acc_tensorboard_04


要确保你想要下载的数据,你已经选中,否则是无法下载的!点击上图中的箭头所指,弹出如下:

深度学习的loss和acc曲线 loss与acc_同时显示多个模型训练结果_05


选中你想要保存的模型loss数据,然后点击CSV,则弹出保存对话框,你可以任意命名。依次全部下载,即可完成模型训练数据!

假设你保存的数据名称如下:

--run_2-tag-loss.csv
--run_3-tag-loss.csv
--run_4-tag-loss.csv

接下来,直接上代码了!!

import pandas as pd
import matplotlib.pyplot as plt
from io import StringIO

net2 = pd.read_csv('run_2-tag-loss.csv', usecols=['Step', 'Value'])
plt.plot(net2.Step, net2.Value, lw=1.5, label='Net-2', color='pink')
net3 = pd.read_csv('run_3-tag-loss.csv', usecols=['Step', 'Value'])
plt.plot(net3 .Step, net3 .Value, lw=1.5, label='Net-3', color='green')
net4 = pd.read_csv('run_4-tag-loss.csv', usecols=['Step', 'Value'])
plt.plot(net4 .Step, net4 .Value, lw=1.5, label='Net-4', color='yellow')

plt.legend(loc=0)
plt.show()

执行结果,如下图:

深度学习的loss和acc曲线 loss与acc_tensorboard_06