STEP_FUNCTION_NEURON = 1 SIGMOID_FUNCTION_NEURON = 2 #layers of neurons have to be added in order from input layer to output layer neuron_count = 0 class StepNeuron(): def __init__(self): global neuron_count self.inputs = [] self.outputs = [] self.type = STEP_FUNCTION_NEURON self.activation = 1.0 neuron_count +=1 self.number = neuron_count print 'created neuron #',self.number def fire(self): print 'Neuron #%d fired' % self.number for synapse in self.outputs: synapse.activated = True def check_potential(self): activation = 0.0 for synapse in self.inputs: if synapse.activated == True: synapse.activated = False activation += synapse.weight if activation >= self.activation: self.fire() class Input(): def __init__(self): self.type = STEP_FUNCTION_NEURON self.outputs = [] self.activation = False def fire(self): print 'input fired' for synapse in self.outputs: synapse.activated = True class Synapse(): def __init__(self,fromneuron,toneuron,weight): self.fromneuron = fromneuron fromneuron.outputs += [self] self.toneuron = toneuron toneuron.inputs += [self] self.weight = weight self.activated = False #input layer i1 = Input() i2 = Input() #layer 1 n1 = StepNeuron() n2 = StepNeuron() n3 = StepNeuron() n4 = StepNeuron() #layer 2 n5 = StepNeuron() n6 = StepNeuron() neuron_list=[n1,n2,n3,n4,n5,n6] #synapse leaving i1 s1 = Synapse(i1,n1,1.0) s2 = Synapse(i1,n2,1.0) s3 = Synapse(i1,n3,1.0) s4 = Synapse(i1,n4,1.0) #synapse leaving i2 s1 = Synapse(i2,n1,1.0) s2 = Synapse(i2,n2,1.0) s3 = Synapse(i2,n3,1.0) s4 = Synapse(i2,n4,1.0) #synapse leaving n1 s5 = Synapse(n1,n5,1.0) s6 = Synapse(n1,n6,1.0) #synapse leaving n2 s5 = Synapse(n2,n5,1.0) s6 = Synapse(n2,n6,1.0) #synapse leaving n3 s5 = Synapse(n3,n5,1.0) s6 = Synapse(n3,n6,1.0) #synapse leaving n4 s5 = Synapse(n4,n5,1.0) s6 = Synapse(n4,n6,1.0) i1.fire() for neuron in neuron_list: neuron.check_potential() for neuron in neuron_list: neuron.check_potential() i2.fire() for neuron in neuron_list: neuron.check_potential() for neuron in neuron_list: neuron.check_potential()