2014-02-26 20 views
0

這是我第一次編碼,所以我有一些簡單的查詢。所以我在hopfield網絡中遇到了這個問題,我試圖用我在代碼結尾的4個模式「訓練」我的網絡。然後我需要運行10次迭代來看看會發生什麼。Python Hopfield Network:訓練網絡,但吐出相同的值

但是,當我試着運行這個,我得到的輸出值都與最初的相同。所以我不確定我做錯了什麼。或者這是否意味着網絡進入穩定狀態?

# 
#          Preparations 
# 

nodes=[] 
NUMNODES=16 
training=[] 

# 
#         Defining Node Class 
# 

class Node(object): 

    def __init__(self,name=None): 
     self.name=name 
     self.activation_threshold=0.0 
     self.net_input=0.0 
     self.outgoing_connections=[] 
     self.incoming_connections=[] 
     self.connections=[] 
     self.activation=None 

    def __str__(self): 
     return self.name 

    def addconnection(self,sender,weight=1.0): 
     self.connections.append(Connection(self,sender,weight)) 

    def update_input(self): 
     self.net_input=0.0 
     for conn in self.connections: 
      self.net_input = (conn.weight * conn.sender.activation) 
     print 'Updated Input for node', str(self), 'is', self.net_input 

    def update_activation(self): 
     if self.net_input > self.activation_threshold: 
      self.activation = 1.0 
     elif self.net_input <= self.activation_threshold: 
      self.activation = 0.0 
     print 'Updated Activation for node', str(self), 'is', self.activation 

    def update_training(self): 
     Node = random.choice(nodes) 

# 
#         Defining Connection Class 
# 

class Connection(object): 
    def __init__(self, sender, reciever, weight): 
     self.weight=weight 
     self.sender=sender 
     self.reciever=reciever 
     sender.outgoing_connections.append(self) 
     reciever.incoming_connections.append(self) 

# 
#         Other Programs 
# 

def set_activations(act_vector): 
    """Activation vector must be same length as nodes list""" 
    for i in xrange(len(act_vector)): 
     nodes[i].activation = act_vector[i] 


for i in xrange(NUMNODES): 
    nodes.append(Node(str(i))) 

for i in xrange(NUMNODES):#go thru all the nodes calling them i 
    for j in xrange(NUMNODES):#go thru all the nodes calling them j 
     if i!=j:#as long as i and j are not the same 
      nodes[i].addconnection(nodes[j])#connects the nodes together 

# 
#           Training Pattern 
# 

set_activations([1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]) 
set_activations([1.0,1.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,1.0,0.0,0.0,0.0]) 
set_activations([1.0,1.0,0.0,0.0,1.0,1.0,0.0,0.0,1.0,1.0,0.0,0.0,1.0,1.0,0.0,0.0]) 
set_activations([1.0,0.0,1.0,0.0,1.0,0.0,1.0,0.0,1.0,0.0,1.0,0.0,1.0,0.0,1.0,0.0]) 

# 
#          Running 10 Iterations 
# 

for i in xrange(10): 
    print '      *********** Iteration', str(i+1), '***********' 
    for thing in nodes: 
     thing.update_training() 
     thing.update_input() 
     thing.update_activation() 

回答

0

啊,沒關係。我意識到我的錯誤,並修復了我的代碼。