2

強化学習をセットアップしようとしてPyBrainいますが、初めてアクションを取得しようとすると、同じエラーが発生し続けます。module.pyのこの行は、使用している (モジュールの子)の入力バッファーがActionValueTable適切に設定されていないため、アサート エラーをスローしています。

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

他の誰かが同様の問題を経験したか、問題を解決する方法について洞察を持っていますか?

4

4 に答える 4

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 に答える