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应该让这更容易,但似乎我必须分别跟踪神经元和连接.
我假设您正在按照NEAT算法进行操作?对于你的问题有两种不同的答案:
网络拓扑的开放式演化:在这种情况下,我建议将每个神经元封装在自己的“层”/模块中,并迭代地添加/删除它们及其与网络的连接,有点像本教程中的那样,只不过会有更多(单神经元)层。不要忘记sortModules()在每次拓扑更改后调用该方法。
在预定义框架内找到最佳拓扑(例如最多 1000 个神经元)。在这种情况下,从一开始就构建完整的网络会更容易、更有效,只需屏蔽一些连接(例如使用MaskedParameters模块)。其中,模因算法 (像这样使用)被设计用来搜索这样的拓扑空间。
正如您所说,另一种选择是手动管理所有权重(通过跟踪什么在哪里,或使用NeuronDecomposableNetwork),但我不建议这样做。
一般评论:对于像您这样的 pybrain 的更高级用途,依赖“buildNetwork”快捷方式确实太有限了,您将希望直接使用 Network/Module/Connection API。
| 归档时间: |
|
| 查看次数: |
1148 次 |
| 最近记录: |