PyBrain强化学习输入缓冲区不正确

时间:2014-05-03 06:41:56

标签: python pybrain reinforcement-learning

我正在尝试设置PyBrain以进行强化学习,但在我第一次尝试获取操作时继续获得相同的错误。 module.py中的这一行导致断言失败,因为我们正在使用的ActionValueTable(模块的子节点)上的输入缓冲区未正确设置。

 assert len(self.inputbuffer[self.offset]) == len(inpt)

是否有其他人遇到类似问题或对如何解决问题有所了解?

4 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。我用net.activateOnDataset(tstdata)替换了net.activate(tstdata),它对我有用。这也是他们在示例代码中使用的功能。

答案 1 :(得分:0)

我遇到了类似的问题 - 我运行pdb检查indim和outdim,它们都不正确(即不是我们在环境文件中设置的值。)

确保这些值是正确的,请跟进任何进展。

答案 2 :(得分:0)

self.offset对我来说是个问题:

(49)activate()
-> self.inputbuffer[self.offset] = inpt
(Pdb) p self
<RecurrentNetwork 'RecurrentNetwork-13'>
(Pdb) p self.inputbuffer
array([[ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.]])
(Pdb) p inpt
array([ 0.36663106,  0.10664821, -0.09483858,  0.24661628, -0.33891044,
       -0.16277863, -0.46995505,  0.43191341,  0.46647206, -0.14306874])
(Pdb) p self.offset
3825
(Pdb) 

编辑:修复

net.offset = 0 # wtf pybrain
for inp, target in testDS:
    netOut.extend(net.activate(inp))

背景信息:在使用内置的pybrain GA进行训练后,我打印出了网络的结果。

我之前使用过循环网络并且没有问题(甚至是相同的数据集),因此对于出了什么问题感到好奇。我还没有深入研究GA(或其他我不知道的事情)对网络所做的事情,但无论在进入涉及net.activate()的循环之前将偏移量设置为0都已修复它现在我正在进行适当的激活(确保在循环之前将其设置为0,而不是在此期间)。

也许发生这种情况是因为我已经对它仍然认为涉及的单独数据进行了培训?

祝你好运!

答案 3 :(得分:0)

@Emi Nietfeld,我遇到了同样的问题,即我的indim和outdim值不正确。我检查了ActionValueTable()的实现。 ActionValueTable已在名为interface.py的文件中实现,其路径为pybrain\rl\learners\valuebased\interface.py

构造函数如下

def __init__(self, numStates, numActions, name=None)

并且对超级构造函数的调用如下

Module.__init__(self, 1, 1, name)

所以indim和outdim总是初始化为1 我按如下方式编辑了对超级构造函数的调用

Module.__init__(self, numStates, numActions, name)

这对我有用