2

我正在尝试PyBrain为强化学习进行设置,但是当我第一次尝试执行操作时,仍然会出现相同的错误。module.py中的这一行会引发断言失败,因为ActionValueTable我们正在使用的(模块的子模块)上的输入缓冲区设置不正确。

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

有没有其他人遇到过类似的问题或对如何解决问题有见解?

4

4 回答 4

1

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

于 2015-01-03T22:40:03.663 回答
0

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

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

于 2014-05-03T22:52:02.210 回答
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,而不是在循环期间)。

也许这是因为我已经在它仍然认为涉及的单独数据上对其进行了训练?

祝你好运!

于 2014-08-11T00:05:25.603 回答
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)

这对我有用

于 2016-11-26T23:27:45.230 回答