强化学习paper绘图技巧——改进smooth

本文介绍了如何使用Python的Seaborn库进行数据可视化,并针对强化学习中的数据平滑问题进行了深入探讨。作者发现了原博客中`smooth`函数的不足,通过对函数的改进,解决了图像在结尾处下降的问题。通过提供修改后的`smooth`函数代码,实现了与论文一致的平滑效果。此外,分享了在绘制奖励函数时增加y轴数据多样性的技巧,以及加载和处理多个数据集的示例。
摘要由CSDN通过智能技术生成

绘图利器——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)
强化学习领域,绘制图表是非常重要的,它可以帮助你更好地理解算法的性能和结果。下面是一些强化学习论文中常用的绘图技巧: 1. 折线图(Line Plot):用于显示随时间变化的算法性能。可以绘制不同算法在不同训练步骤或时间步骤下的奖励曲线或价值函数曲线。可以使用Matplotlib或Seaborn库绘制折线图,并使用不同线条颜色或标记来表示不同算法。 2. 柱状图(Bar Plot):用于比较不同算法或不同参数设置下的实验结果。可以绘制不同算法的平均奖励或不同参数设置的性能比较。可以使用Matplotlib或Seaborn库绘制柱状图,并使用不同颜色的柱子来表示不同算法或参数设置。 3. 箱线图(Box Plot):用于显示数据分布的统计信息,如中位数、四分位数等。可以用于比较不同算法在不同环境下的奖励分布。可以使用Matplotlib或Seaborn库绘制箱线图,并使用不同颜色的箱子来表示不同算法或环境。 4. 散点图(Scatter Plot):用于显示两个变量之间的关系。可以用于观察状态和动作之间的关系或观察奖励和训练步骤之间的关系。可以使用Matplotlib或Seaborn库绘制散点图,并使用不同颜色或标记来表示不同变量。 5. 热力图(Heatmap):用于显示数据矩阵的颜色编码。可以用于显示状态值函数或动作值函数的矩阵。可以使用Matplotlib或Seaborn库绘制热力图,并使用不同颜色来表示不同数值。 除了这些基本的图形类型,你还可以根据具体需求选择其他类型的图表,如面积图、雷达图等。在绘制图表时,要注意选择合适的颜色、标签和标题,以及适当的坐标轴标尺和刻度。这些绘图技巧可以使你的强化学习论文更加直观和有说服力。
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

农夫三犭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值