有没有一个好方法可以在完全连接的大脑网络中添加/删除神经元及其相关连接?假设我从:
from pybrain.tools.shortcuts import buildNetwork
net = buildNetwork(2,3,1)
我该如何使它成为(2,4,1)或(2,2,1)网络,同时保持所有旧权重(并像初始化网络时一样初始化任何新权重为随机的)?我之所以要这样做,是因为我正在尝试使用一种进化学习策略来确定最佳架构,而“变异”步骤涉及到以某种概率添加/移除节点。(输入和输出模块应始终保持不变。)
编辑:我发现了神经元可分解网络,这应该会使这更容易,但似乎我仍然需要分别跟踪神经元和连接。在
我想你是按照NEAT算法来做的? 你的问题有两个不同的答案:
开放式网络拓扑的演化:在这种情况下,我建议将每个神经元封装在自己的“layer”/模块中,并迭代地添加/删除它们及其与网络的连接,有点像this tutorial,只是会有更多(单个神经元)层。不要忘记在每次拓扑更改后调用
sortModules()
方法。在一个预定义的框架内找到最佳的拓扑结构(比如最多1000个神经元)。在这种情况下,在一开始就构建完整的网络更容易、更高效,只需屏蔽一些连接(例如使用^{} 模块)。其中,memetic algorithms(used like this)被设计用来搜索这样的拓扑空间。
正如您所说,另一种方法是手动管理所有权重(通过跟踪what is where,或使用
NeuronDecomposableNetwork
),但我不建议那样做。在总评:对于像您这样的pybrain的更高级的使用,依赖“buildNetwork”快捷方式实在是太有限了,您应该直接使用Network/Module/connectionapi。在
相关问题 更多 >
编程相关推荐