- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
是否有一种好方法可以在完全连接的 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/
我正在实验性地尝试创建一种具有以下标准的新型神经网络: 每个神经元必须是一个单独的对象。 每个神经元都应该有自己的线程。 网络必须部分连接且随机(在启动时)。 神经元必须异步运行以计算其输出、更新其权
如果我想动态地向我的 tensorflow 层中的一个添加新节点,我该怎么做? 例如,如果我想在模型训练一段时间后将隐藏节点的数量从 10 更改为 11。另外,假设我知道我希望进出该节点/神经元的权重
换句话来说,将神经元求和公式中sigmoid之前的偏置切换为b_j或者附加w_ij*x_i的主要原因是什么?表现? 哪种方法最好,为什么? 注意:j是实际层的神经元,i是下层的神经元。 最佳答案 注意
我是一名优秀的程序员,十分优秀!