tensorboard的确很香,尽管可以显示训练过程当中的数据,但是有一点不太友好的是,无法在tensorboard生成的数据界面中任意操作数据,这就有些不爽,数据就在眼前,可就是玩弄不了,而且tensorboard导出来的图说实话也不是很美观,所以考虑先把数据导出到excel,后续就可以随愿了。
完整代码
代码已添加注释,下文有简要分析,很容易理解
# coding: utf-8
from tensorboard.backend.event_processing import event_accumulator
import numpy as np
import pandas as pd
def readEvent(event_path, scalarName):
'''
读tensorboard生成的event文件中指定的标量值
event_path:event文件路径
scalarName:要操作的标量名称
'''
event = event_accumulator.EventAccumulator(event_path)
event.Reload()
print("\033[1;34m数据标签:\033[0m")
print(event.Tags())
print("\033[1;34m标量数据关键词:\033[0m")
print(event.scalars.Keys())
value = event.scalars.Items(scalarName)
print("你要操作的scalar是:",scalarName)
return value
def exportToexcel(scalarNameList, excelName):
'''
将不同的标量数据导入到同一个excel中,放置在不同的sheet下
注:excel中sheet名称的命名不能有:/\?*这些符号
'''
writer = pd.ExcelWriter(excelName)
for i in range(len(scalarNameList)):
scalarName = scalarNameList[i]
scalarValue = readEvent(event_path,scalarName)
data = pd.DataFrame(scalarValue)
if scalarName == 'Loss/critic_loss':
scalarName = 'critic_loss'
if scalarName == 'Loss/actor_loss':
scalarName = 'actor_loss'
data.to_excel(writer,sheet_name=scalarName)
writer.save()
print("数据保存成功")
if __name__ == "__main__":
event_path ="./events.out.tfevents.1587174099.eden"
scalarNameList = [ 'score', 'Loss/critic_loss', 'Loss/actor_loss']
excelName = "data.xlsx"
exportToexcel(scalarNameList,excelName)
分析:readEvent函数:重载event文件,并读取指定标量名称的数据,其返回值value是一个list。exportToexcel(scalarNameList, excelName)函数是借助pandas将所获取到的对应的标量数据转换为一个Dataframe,然后导出到excel中,由于操作的是多个scalar的数据,要想导入到一个excel中,首先需要借助ExcelWriter创建一个writer,然后将要导入的数据一起添加到这个writer中,且对sheet定义不同的名称(这里就以scalar的名称命名)即可。