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算法的路线进行操作?你的问题有两个不同的答案:

  1. 网络拓扑的开放式演化:在这种情况下,我建议将每个神经元封装在它自己的“层”/模块中,并迭代地添加/删除它们以及它们与网络的连接,有点像本教程,除了会有更多(单神经元)层。不要忘记sortModules()在每次拓扑更改后调用该方法。

  2. 在预定义的框架内找到最佳拓扑(比如最多 1000 个神经元)。在这种情况下,在开始时构建完整的网络会更容易、更有效,并且只需屏蔽一些连接(例如使用MaskedParameters模块)。其中,模因算法 (像这样使用)旨在搜索此类拓扑空间。

正如您所说,另一种方法是手动管理所有权重(通过跟踪什么是 where或使用NeuronDecomposableNetwork),但我不建议这样做。


一般评论:对于像你这样的 pybrain 更高级的使用,依赖 `buildNetwork' 快捷方式真的太有限了,你会想直接使用 Network/Module/Connection API。

于 2012-08-07T03:59:12.177 回答