0%

Tensorboard中的图放到论文中

最近写了一篇强化学习用于供水管网的论文,算法的训练过程中用到了Tensorboard(stable-baselines提供了tansorboard的接口)来可视化训练数据,但是,tensorboard的图直接放入到论文中会显得很难看,包括xlabel和ylabel需要重新定义,图片的风格需要修改等等操作直接在tensorboard中很难操作,需要将这些数据导出来,然后使用matplotlib和seaboarn来进行plot,这篇博客记录一下如何将tensorboard中的数据进行导出并画图。

利用tensorboard中的导出数据功能

选中左上角的Show data download links

在每张图的右下角选择run to download,然后可以选择csv或者json格式的文件。

导出CSV文件,经过测试发现,当修改左边平滑之类的参数,导出的数据都是一样的,都是原始的数据。

Tensorboard可视化界面中的功能键介绍

image-20210109132627928

第二个:Toggle y-axis log scale:将y轴对数化

第三个:Fit domain to data:如果拖动了图片等,再重新回到原始位置

第四个:Download Current Chart as SVG

Stable-baselines3的tensorboard integration的文档:Stable-baselines3已经集成了tensorboard的记录,默认记录三大块部分:rollout,time,train(这三个文件体现在代码的哪里)。当然,也可以记录更多的数据,包括图片视频,可以在训练一段时间后评估一下agent的效果和状态。

https://stable-baselines3.readthedocs.io/en/master/guide/tensorboard.html?highlight=tensorboard

stable-baselines3中关于tensorboard的核心文件在:https://github.com/DLR-RM/stable-baselines3/blob/5993033c73d56e8ac13f59647d47374766d0b63d/stable_baselines3/common/logger.py

利用Matplotlib画图

1
2
3
4
5
6
7
8
9
10
# 第一幅图片:训练的平均长度
fig, ax1 = plt.subplots(1, 1) # a figure with a 2x1 grid of Axes
len_mean = pd.read_csv("run-PPO_2-tag-rollout_ep_len_mean.csv")
ax1.plot(len_mean['Step'], tensorboard_smoothing(len_mean['Value'], smooth=0.6), color="#3399FF")
#ax1.set_xticks(np.arange(0, 24, step=2))
ax1.set_xlabel("timesteps")
ax1.set_ylabel("Average Episode Length(steps)", color="#3399FF")
ax1.set_title("Average Episode Length")
plt.show()
fig.savefig(fname='./figures/ep_len_mean'+'.pdf', format='pdf')

If you like my blog, please donate for me.