我有一个算法,根据到达输出节点的路径数将节点分为几层
例如,如果有:
它们将按该顺序显示(输入在第0层,隐藏在第1层,输出在第2层)
for node in self.nodes:
if node.nodeType != 'INPUT':
inNodeIDs = [con.inNode for con in self.connections if con.outNode == node.ID]
node.layer = max([node.layer for node in self.nodes if node.ID in inNodeIDs])+1
节点包含:ID(ID)、layerNumber(layer)和nodeType('HIDDEN'/'INPUT'/'OUTPUT'))
连接包含:inNode(按ID表示节点)和outNode(按ID表示节点)
我的算法获得传入该节点的连接列表,然后查找与该节点连接的具有最高layerNumber的节点,然后将当前节点的layerNumber设置为高1,因为它比该节点低1层
我的算法的问题是,节点是按这些ID排序的,但是可以在具有较高ID的节点之前添加一个位于层中的节点,因此当算法通过时,它无法正确计算,因为它以错误的顺序计算节点
例如,输出节点是在初始化时创建的,因此如果有2个IN和1个out,则它是节点2(由于明显的原因,ID从0开始) 因此,对应于其层的节点ID可以如下所示:
http://imgur.com/a/C0Zc1 (绿色=输入,灰色=隐藏,蓝色=输出)
如您所见,节点8和节点6位于同一层中,当一个节点与另一个节点明确连接时
通过禁用连接并在原始连接连接的两个节点之间添加一个节点和两个连接来添加节点
(1) (1)_
| | |
| = (3) |
| | |
(2) (2)_|
新节点layerNum的计算方式是通过旧连接out nodes layerNum+1(outnodes layerNum也会增加),但当在2个现有节点之前创建节点时,不会增加其layerNum,即在上面的示例中,添加了节点5,但不会更新节点3的layerNum
有人能想出解决这个问题的方法吗?有没有一种合乎逻辑的方法通过网络传播这一层的变化?我唯一能想到的就是多次运行它,以确保所有东西都通过网络传播
另外,我希望这一切都有意义,并提前感谢大家的帮助
尝试在每次添加新节点时调用您的算法,这将使其平均分配网络节点。如果代码中的其他地方没有可能出现错误,这应该可以工作
相关问题 更多 >
编程相关推荐