是否存在将神经元及其相关连接添加到/从完全连接的PyBrain网络中删除的好方法?说我开始:

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

在保持所有旧权重的同时,如何将其变成(2,4,1)或(2,2,1)网络(并初始化网络时将所有新权重初始化为随机的)?我之所以想这样做,是因为我正在尝试使用进化学习策略来确定最佳架构,而“变异”步骤涉及以一定的概率添加/删除节点。 (输入和输出模块应始终保持不变。)

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

最佳答案

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

  • 网络拓扑的开放式演变:在这种情况下,我建议将每个神经元封装在其自己的“层”/模块中,并迭代地添加/删除它们及其与网络的连接,有点像this tutorial,除了将会有更多的(单神经元)层。每次拓扑更改后,请不要忘记调用sortModules()方法。
  • 在预定义的框架(例如最多1000个神经元)内查找最佳拓扑。在这种情况下,从一开始就构建完整的网络会更轻松,更高效,只需屏蔽的某些连接即可(例如,使用 MaskedParameters 模块)。其中,memetic algorithms (used like this)旨在搜索此类拓扑空间。

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

    一个一般性的评论:对于像您这样的pybrain的更高级的使用,依赖于'buildNetwork'快捷方式确实太受限制了,您将要直接使用Network/Module/Connection API。

    关于python - PyBrain神经元操纵,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11660014/

    10-12 21:38