PyBrain神经元操纵

ubo*_*omb 6 python neural-network pybrain

有没有一种很好的方法可以在完全连接的PyBrain网络中添加/删除神经元及其相关连接?说我开始:

from pybrain.tools.shortcuts import buildNetwork
net = buildNetwork(2,3,1)
Run Code Online (Sandbox Code Playgroud)

我怎样才能使它成为(2,4,1)或(2,2,1)网络,同时保持所有旧权重(并在初始化网络时初始化任何新权重是随机的)?我想这样做的原因是因为我试图使用进化学习策略来确定最佳架构,而"突变"步骤则涉及以某种可能性添加/删除节点.(输入和输出模块应始终保持不变.)

编辑:我发现NeuronDecomposableNetwork应该让这更容易,但似乎我必须分别跟踪神经元和连接.

sch*_*aul 4

我假设您正在按照NEAT算法进行操作?对于你的问题有两种不同的答案:

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

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

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


一般评论:对于像您这样的 pybrain 的更高级用途,依赖“buildNetwork”快捷方式确实太有限了,您将希望直接使用 Network/Module/Connection API。