2016-11-22 69 views
0

我有一個算法,根據到達輸出節點需要多少路徑將節點排序成圖層。圖層計數算法

因此,例如,如果有:

  • 兩個輸入節點
  • 一個隱藏節點
  • 一個輸出

他們會在層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(層)和節點類型( '隱藏'/ 'INPUT'/ '輸出')

甲連接包含:inNode(其指的是節點通過ID)和outNode(通過ID引用一個節點)

我的算法獲取傳入該節點的連接列表,然後找到與最高層編號連接的節點,然後設置當前節點層數爲1,因爲它比該節點更下層1層

我的算法的問題是,節點按ID排序,但可以添加一個節點,它位於具有較高ID的節點之前的一個層中,因此,當算法經過時,它不會正確計算它,因爲它會計算節點順序錯誤。

例如輸出節點在初始化創建所以如果有2項和1出它是節點2(ID的開始在0出於顯而易見的原因) 所以相應於它們的層中的節點的ID可以是這樣的:

  • 層0(NODE0,節點1)輸入
  • 層1(節點5)隱藏
  • 二層(節點4)隱藏
  • 三層(節點3)隱藏
  • layer4(節點2)輸出

http://imgur.com/a/C0Zc1 (綠色=輸入,灰色=隱藏,藍色=輸出)

,你可以看到節點8和6,其中放置在相同的層,當一個被明確地連接到另一個

節點由加入禁用的連接,並增加一個節點,在兩個節點之間的原始連接連接

(1) (1)_ 
|  | | 
| = (3) | 
|  | | 
(2) (2)_| 

並計算新節點layerNum的方式的兩個連接是由舊的連接了節點層+ 1(outnodes layerNum是也增加了)但是當一個沒有de是在2個現有節點之前創建的,因此它不會增加其layerNum,即在上面的示例中添加了節點5,但節點3的layerNum不會被更新

任何人都可以想出解決這個問題的方法嗎?通過網絡傳播這一層次變化,我唯一能想到的就是多次運行它,以確保一切通過網絡傳播。

P.S我希望這一切有意義,感謝人民提前

回答

1

幫助嘗試每次添加一個新的節點時,調用你的算法,這應該使其均勻divy了網絡節點。這應該工作,如果它不可能有錯誤其他地方在代碼

+0

謝謝你!這工作 – Padskiiz