2012-07-25 4 views
6

완벽하게 연결된 PyBrain 네트워크에서 뉴런 및 관련 연결을 추가/제거하는 좋은 방법이 있습니까? 어떤 새로운 것을 그것 (2,4,1) 또는 모든 기존의 무게를 유지하면서 (2,2,1) 네트워크를 만드는 (및 초기화에 대해PyBrain 뉴런 조작

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

가 어떻게 갈 것 : I로 시작하는 말 네트워크를 초기화 할 때와 마찬가지로 무작위로)? 이 작업을 수행하려는 이유는 진화 학습 전략을 사용하여 최상의 아키텍처를 결정하려고 시도하고 '돌연변이'단계에 노드를 추가/제거하는 것이 포함될 가능성이 있기 때문입니다. (입력 및 출력 모듈은 항상 동일하게 유지되어야합니다.)

편집 :이 작업을 더 쉽게 만들어야하는 NeuronDecomposableNetwork가 발견되었지만 여전히 뉴런과 연결을 따로 추적해야합니다.

답변

4

NEAT 알고리즘의 행을 수행한다고 가정합니다. 귀하의 질문에 두 개의 서로 다른 답이 있습니다

  1. 열기는 네트워크 토폴로지의 진화 종료 :이 경우, 나는 그것의 자신의 "레이어"의 모든 신경을 캡슐화하는 것이 좋습니다/모듈을하고 추가/제거 네트워크에 대한 연결은 반복적으로 this tutorial과 비슷합니다. 단, 더 많은 (단일 신경원) 레이어가있을 것입니다. 각 토폴로지 변경 후 sortModules() 메서드를 호출하는 것을 잊지 마십시오.

  2. 미리 정의 된 프레임 워크 내에서 최상의 토폴로지 찾기 (최대 1000 개의 뉴런). 이 경우 처음에는 전체 네트워크를 구축하는 것이 더 쉽고 효율적이며 마스크 (예 : MaskedParameters 모듈 사용)의 일부 연결 만 마스크하면됩니다. 그 중에서도 memetic algorithms(used like this)은 이러한 토폴로지 공간을 검색하도록 설계되었습니다.

대안은, 당신이 말한대로, 수동 (what is where 추적, 또는 NeuronDecomposableNetwork를 사용하여) 모든 가중치를 관리하고 있지만 것을 권장하지 않습니다.


일반적인 코멘트 :은`buildNetwork '바로 가기에 의존하는 등 당신 같은 pybrain의 고급 용도에 대한 정말 너무 제한되어, 당신은 직접 네트워크/모듈/연결 API를 사용하는 것이 좋습니다.

+0

신난다, 이것은 나를 도와 준다, 고마워! 나는 첫 번째 아이디어를 정말 좋아한다. 개별 뉴런으로 레이어를 사용하는 것에 대해서는 생각하지 않았을 것입니다. 그리고 예, 약 3 일 동안 시도한 후 지금은 수동 관리도 권하지 않습니다 (다른 stackoverflow 게시물은 실제로 어디에서 아이디어를 얻었는지). 나는 약간의 실험을 마치고 (그리고 NEAT를 연구하면서 이것이 내가 처음 발견 한 것이지만 아직 정확히 무엇을하고 싶었는지) 돌아올 것이며 내 결과를 업데이트 할 것이다. – ubomb