强化学习paper绘图技巧 您所在的位置:网站首页 origin画图数据太多怎么把线画平滑 强化学习paper绘图技巧

强化学习paper绘图技巧

2024-07-10 06:06| 来源: 网络整理| 查看: 265

绘图利器——Seaborn

强化学习的paper中离不开各种数据的可视化,绘图中如何对数据进行处理、平滑是个很重要的问题。 人类高质量图片: 图片来自论文“Addressing Function Approximation Error in Actor-Critic Methods”人类低质量图片: 个人数据绘制图片 那么如何绘制出一张高质量的图片呢?这里介绍一个绘图常用的Python库——Seaborn 首先是库的安装

pip install seaborn

接着是库的使用,可以参考以下文章: 官方链接 深度强化学习实验中的paper绘图方法 10分钟python图表绘制 | seaborn入门 使用方法基本就是链接中博客所介绍的那样,这里主要是针对链接深度强化学习实验中的paper绘图方法中提到的smooth函数进行一些修改,个人觉得链接中,smooth函数是有点问题的,绘制出的图像在结尾处会出现下降的情况。 贴出原博客代码

def smooth(data, sm=1): if sm > 1: smooth_data = [] for d in data: y = np.ones(sm)*1.0/sm d = np.convolve(y, d, "same") smooth_data.append(d) return smooth_data

以上面TD3论文中的数据为例(数据链接),使用此函数对图中(d) Ant-v1进行绘制,图片如下所示: smooth前: 在这里插入图片描述smooth后:

在这里插入图片描述可以很明显看到,数据经过处理后,已经变得很平滑。但是绘制出的结果和论文还是有一定差距的。经过分析发现,问题出现在smooth函数中的卷积部分,将代码进行如下修改:

def smooth(data, sm=1): smooth_data = [] if sm > 1: for d in data: z = np.ones(len(d)) y = np.ones(sm)*1.0 d = np.convolve(y, d, "same")/np.convolve(y, z, "same") smooth_data.append(d) return smooth_data

再次绘制: 在这里插入图片描述可以看到,图像与论文结果一致。成功解决了这个问题。 贴出自己的绘图代码:

import numpy as np import seaborn as sns import matplotlib.pyplot as plt import warnings warnings.filterwarnings('ignore') linestyle = ['-', '--', ':', '-.'] color = ['r', 'g', 'b', 'k'] label = ['algo1', 'algo2', 'algo3', 'algo4'] def smooth(data, sm=1): smooth_data = [] if sm > 1: for d in data: z = np.ones(len(d)) y = np.ones(sm)*1.0 d = np.convolve(y, d, "same")/np.convolve(y, z, "same") smooth_data.append(d) return smooth_data data = [] # 下载好数据后,根据自己文件路径,修改np.load()中的代码路径 data1 = np.load("E:\Github Download code\TD3-master\learning_curves\Ant\TD3_Ant-v1_0.npy").tolist() data2 = np.load("E:\Github Download code\TD3-master\learning_curves\Ant\TD3_Ant-v1_1.npy").tolist() data3 = np.load("E:\Github Download code\TD3-master\learning_curves\Ant\TD3_Ant-v1_2.npy").tolist() data4 = np.load("E:\Github Download code\TD3-master\learning_curves\Ant\TD3_Ant-v1_3.npy").tolist() data5 = np.load("E:\Github Download code\TD3-master\learning_curves\Ant\TD3_Ant-v1_4.npy").tolist() data6 = np.load("E:\Github Download code\TD3-master\learning_curves\Ant\TD3_Ant-v1_5.npy").tolist() data7 = np.load("E:\Github Download code\TD3-master\learning_curves\Ant\TD3_Ant-v1_6.npy").tolist() data8 = np.load("E:\Github Download code\TD3-master\learning_curves\Ant\TD3_Ant-v1_7.npy").tolist() data9 = np.load("E:\Github Download code\TD3-master\learning_curves\Ant\TD3_Ant-v1_8.npy").tolist() data10 = np.load("E:\Github Download code\TD3-master\learning_curves\Ant\TD3_Ant-v1_9.npy").tolist() data.append(data1) data.append(data2) data.append(data3) data.append(data4) data.append(data5) data.append(data6) data.append(data7) data.append(data8) data.append(data9) data.append(data10) y_data = smooth(data, 19) x_data = np.arange(0, 1e6+5000, 5000) sns.set(style="darkgrid", font_scale=1.5) sns.tsplot(time=x_data, data=y_data, color=color[2], linestyle=linestyle[0]) 个人经验

在绘制奖励函数时,尽量让y轴数据变得丰富,一个技巧是选取不同随机数种子,在不同种子下对算法进行测试,将每次种子下,产生的数据进行保存,最后再进行统一处理。 数据格式可以为:

y_data=[[seed1产生的奖励], [seed2产生的奖励], ..., [seedn产生的奖励]] smooth_data = smooth(y_data, sm)


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有