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()