PyBrain神经元操纵

问题描述:

有没有一种很好的方法来将神经元及其关联连接添加到/从完全连接的PyBrain网络中/从其中移除?说我开始:PyBrain神经元操纵

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

我怎么会去使它成为一个(2,4,1)或(2,2,1)的网络,同时保持所有旧的权重(和初始化任何新的到像初始化网络时那样是随机的)?我想这样做的原因是因为我试图使用进化学习策略来确定最佳体系结构,“突变”步骤涉及以某种概率添加/删除节点。 (输入和输出模块应该始终保持不变。)

编辑:我发现NeuronDecomposableNetwork应该使这更容易,但它似乎仍然需要分别跟踪神经元和连接。

我假设你正在沿着NEAT算法的方向行吗? 有两种不同的答案你的问题:

  1. 公开赛结束演进的网络拓扑:在这种情况下,我建议封装在它自己的“层”的每个神经元/模块,并添加/删除它们和它们与网络的连接迭代,有点像this tutorial,除了会有更多(单神经元)层。在每次拓扑变化之后,不要忘记调用sortModules()方法。

  2. 寻找预定义框架内的最佳拓扑结构(例如最多1000个神经元)。在这种情况下,开始时构建完整网络会更简单,更高效,并且只需要掩码的某些连接(例如使用MaskedParameters模块)。其中,memetic algorithms(used like this)被设计来搜索这样的拓扑空间。

的替代,就像你说的,是手工管理所有的权重(通过跟踪what is where,或使用NeuronDecomposableNetwork),但我不建议这一点。


的一般性意见:对于pybrain的更高级的用途,如你的,依靠`buildNetwork”快捷方式实在是太有限了,你会希望直接使用网络/模块/连接API。

+0

太棒了,这有助于我出一吨,谢谢!我非常喜欢第一个想法。永远不会想到使用图层作为单独的神经元。是的,尝试了大约三天后,我不会推荐手动管理大声笑(另一个*帖子实际上是我的想法)。我会在做一些实验后回来(并且对NEAT进行研究,因为这是我发现的第一个,但几乎正是我想要的),并更新我的帖子和结果。 – ubomb 2012-08-07 17:18:17