Неверный входной буфер обучения PyBrain Reinforcement Learning

Я пытаюсь настроить PyBrain для обучения с подкреплением, но продолжаю получать ту же ошибку, когда пытаюсь выполнить действие в первый раз. Эта строка в module.py вызывает утверждать об ошибке, потому что входной буфер на ActionValueTable (дочерний модуль модуля), который мы используем, не установлен должным образом.

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

Кто-нибудь еще сталкивался с подобной проблемой или знает, как решить проблему?


person amauboussin    schedule 03.05.2014    source источник


Ответы (4)


У меня такая же проблема. Я заменил net.activate(tstdata) на net.activateOnDataset(tstdata), и у меня это сработало. Эту функцию они также используют в примере кода.

person Shruti    schedule 03.01.2015

У меня похожая проблема: я запустил pdb, чтобы проверить indim и outdim, и они оба были неверными (т.е. не те значения, которые мы установили в нашем файле среды).

Убедитесь, что эти значения верны, и следите за любым прогрессом.

person Emi Nietfeld    schedule 03.05.2014

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 (или что-то другое, о чем я не знаю) сделал с сетью, но независимо от установки смещения на 0 перед входом в цикл, который включает net.activate(), исправил это, и теперь я получаю правильные активации (убедитесь, что вы установили его на 0 перед циклом, а не во время).

Может быть, это произошло из-за того, что я обучал его на отдельных данных, которые, по его мнению, были задействованы?

Удачи!

person relh    schedule 11.08.2014

@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)

Это сработало для меня

person Sagnik Mukherjee    schedule 26.11.2016