6

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

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

すべての古い重みを維持しながら(そしてネットワークを初期化するときに行われるように新しい重みをランダムに初期化する)、それを(2,4,1)または(2,2,1)ネットワークにするにはどうすればよいですか?これを実行したい理由は、進化的学習戦略を使用して最適なアーキテクチャを決定しようとしているためです。「変更」ステップには、ある程度の確率でノードを追加/削除することが含まれます。(入力モジュールと出力モジュールは常に同じである必要があります。)

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

4

1 に答える 1

4

私はあなたがNEATアルゴリズムの線に沿ってやっていると思いますか?あなたの質問には2つの異なる答えがあります:

  1. ネットワークトポロジのオープンエンドの進化:この場合、すべてのニューロンを独自の「レイヤー」/モジュールにカプセル化し、このチュートリアルと少し似ていますが、ニューロンとネットワークへの接続を繰り返し追加/削除することをお勧めします。より多くの(単一ニューロン)層になります。sortModules()トポロジを変更するたびに、メソッドを呼び出すことを忘れないでください。

  2. 事前定義されたフレームワーク内で最適なトポロジを見つける(たとえば、最大1000ニューロン)。その場合、最初に完全なネットワークを構築し、一部の接続をマスクするだけの方が簡単で効率的です(MaskedParametersモジュールを使用するなど)。特に、ミームアルゴリズム (このように使用される)は、そのような位相空間を検索するように設計されています。

別の方法は、あなたが言うように、すべての重みを手動で管理することです(何がどこにあるかを追跡するか、を使用してNeuronDecomposableNetwork)が、それはお勧めしません


一般的なコメント:あなたのようなpybrainのより高度な使用法については、 `buildNetwork'ショートカットに依存することは実際にはあまりにも制限されており、Network / Module /ConnectionAPIを直接使用することをお勧めします。

于 2012-08-07T03:59:12.177 に答える