Reputation: 29
So what I have is defined a Node and Connection class. I've created 3 nodes and I have assigned each of the nodes a starting activation. Then I'm suppose to run 10 iterations and see what happens. But I don't exactly know what that means. I've never programmed before, and this is my first language so please bear with me if this is actually really simple and I'm not not understanding. I did try something like..
for i in xrange(10):
for thing in nodes:
Node.update_activation
but this gave me an unbound variable? So I'm just completely lost.
############################################################################################
#
# Preparations
#
############################################################################################
nodes=[]
NUMNODES=3
############################################################################################
#
# Node
#
############################################################################################
class Node(object):
def __init__(self,name=None):
self.name=name
self.activation_threshold=0.0
self.net_input=None
self.outgoing_connections=[]
self.incoming_connections=[]
self.activation=None
def addconnection(self,sender,weight=0.0):
self.connections.append(Connection(self,sender,weight))
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
def update_input(self):
self.net_input=0.0
for conn in self.connections:
self.net_input += conn.wt * conn.sender.activation
print 'Updated Input is', self.net_input
def update_activation(self):
self.activation = self.net_input - 0.5
print 'Updated Activation is', self.activation
############################################################################################
#
# Connection
#
###########################################################################################
class Connection(object):
def __init__(self, sender, reciever, weight=1.0):
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())
for i in xrange(10):
for thing in nodes:
Node.update_activation
Node.update_input
Upvotes: 1
Views: 110
Reputation: 176
Firstly, at the bottom you refer to the Node class explicitly:
for i in xrange(10):
for thing in nodes:
Node.update_activation
Node.update_input
you are not using the thing
variable at all. thing
holds the current node in the list that you are iterating through.
Try:
for i in xrange(10):
for thing in nodes:
thing.update_activation()
thing.update_input()
Also note that I added parenthesis to your functions. Parenthesis makes the program actually call the function you created. For example, thing.update_activation()
is calling the update_activation()
function in the node currently held in the thing
variable.
Furthermore, I am getting an error after this fix: looks like you are setting self.net_input
to None
in the Node class, then you are trying to subtract 0.5 from it in the update_activation()
function.
You can't subtract 0.5 from None
:)
Upvotes: 1