2012-07-25 6 views
6

完全に接続されたPyBrainネットワークとの間でニューロンとその関連接続を追加/削除する良い方法はありますか?私はで始まる言う:PyBrainニューロン操作

from pybrain.tools.shortcuts import buildNetwork 
net = buildNetwork(2,3,1) 

どのように私はすべての新しいものをすべての古い重みを維持する(および初期化中に、それ(2,4,1)または(2,2,1)のネットワークを作りに行きますかネットワークを初期化するときに実行されるようにランダムに)私がこれをやりたいのは、私が進化的な学習戦略を使って最良のアーキテクチャを決定しようとしていることと、ある程度の確率でノードを追加/削除するという「突然変異」ステップが必要なためです。

編集:これを簡単にするはずのNeuronDecomposableNetworkが見つかりましたが、まだニューロンと接続を別々に追跡する必要があるようです。

答えて

4

NEATアルゴリズムの行に沿って作業しているとしますか? あなたの質問には、2つの異なる答えがあります。

  1. を開き、ネットワークトポロジの進化終了:この場合、私は、独自の「層」内のすべてのニューロンをカプセル化をお勧めします/モジュールを、それらを追加/削除ネットワークへのそれらの接続は、より多くの(単一ニューロン)層が存在することを除いて、this tutorialのように少し繰り返します。各トポロジ変更の後にsortModules()メソッドを呼び出すことを忘れないでください。

  2. 定義済みのフレームワーク(最高1000個のニューロン)内で最良のトポロジを見つけること。その場合、初めに完全なネットワークを構築する方が簡単で効率的ですが、マスクの一部(たとえば、MaskedParametersモジュールを使用している)があります。中でも、memetic algorithms(used like this)は、このようなトポロジー空間を検索するように設計されています。

代替は、あなたが言うように、手動(what is whereを追跡する、またはNeuronDecomposableNetworkを使用して)すべての重みを管理しているが、私はことをお勧めしません。


一般的なコメント: `buildNetwork」ショートカットに頼るようにあなたとpybrainのより高度な使用のためには、本当にあまりにも限られており、あなたは直接ネットワーク/モジュール/接続APIを使用したいと思うでしょう。

+0

驚くばかりです、これは私にトンを助けます、ありがとう!私は最初のアイデアが本当に好きです。個々のニューロンとしてレイヤーを使うことは決して考えなかったでしょう。そして、私は約3日間試してみましたが、私は手動管理を勧められませんでした(もう1つのstackoverflow投稿は実際に私がアイデアを得た場所でした)。私はいくつかの実験の後に戻ってきます(そしてNEATを研究しました(これは最初に私が知ったことですが、私が欲しかったものです)。 – ubomb