如何使用tf_agents中的重播缓冲区进行上下文强盗,该缓冲区每天进行预测和训练



我将tf_Agents库用于上下文强盗用例。

在这个用例中,每天进行预测(每天的预测范围在20k到30k之间,每个用户1个)(每天多次),并且只对4天前的所有预测数据进行训练(因为预测的标签需要3天来观察)。

驱动程序似乎只重放batch_size的经验数(因为max_step长度为1上下文强盗)。重播缓冲区也有相同的约束,只处理批量大小的经验。

我想使用检查指针并保存过去4天的所有预测(从驾驶员保存在回放缓冲区中的经验),并且仅在每个给定日期保存的4天中的第一天进行训练。

我不知道如何做以下的事情,如果有任何帮助,我将不胜感激。

  1. 如何(运行驱动程序)使用检查点保存重播缓冲区一整天(一天包含,比如说,3个预测运行,每个预测将在30,000个观察上进行[说批大小为16])。在这个例子中,我需要每天保存多个
  2. 如何保存过去4天(12个预测运行)的重播缓冲区,并且仅检索前3个预测运行(重播缓冲区和驾驶员运行)以每天进行训练。
  3. 不确定如何处理上述#1,#2给出的驱动程序,重放缓冲区和检查指针配置

在重放缓冲区上,我不认为有任何方法可以在没有实现自己的RB类的情况下工作(我不一定推荐)。在我看来,对此最直接的解决方案是采取内存效率低下的打击,并具有不同大小的max_length的两个RB。其中一个是给司机用来存储情节的,然后用rb.as_dataset(single_determinsitic_pass=true)来获得适当的项目,放在第二个用于训练的记忆中。你唯一需要检查的当然是第一个。

注意:我不确定single_determinsitic_pass是如何工作的,你可能想检查一下,以确定返回的数据集的哪一部分对应于你想要训练的那一天。我还怀疑可能是与最后一天对应的部分发生了变化,因为如果我没有记错的话,存储经验的RB表与达到最大长度的游标一起工作,从一开始就开始覆盖。

两个RB都不需要知道有多少个预测运行的逻辑,最后你的代码应该管理这个逻辑,你可能想要跟踪(如果你想保存这个,可能在一个困境中)每天有多少个预测对应,这样你就知道要选择哪个。

相关内容

  • 没有找到相关文章

最新更新