def __init__(self, in_n, out_n, hidden): self.result = {} self.answers = None self.timing_controller = TimingController() self.input_neurons = make_neurons(in_n, self) self.output_neurons = make_neurons(out_n, self) self.hidden_neurons = make_neurons(hidden, self) self.timing_controller.set_neurons(self.input_neurons + self.output_neurons + self.hidden_neurons) # now go through and connect them all... connections = make_connections(self.input_neurons, self.hidden_neurons) connections = connections + make_connections(self.hidden_neurons, self.output_neurons) connections = connections + make_connections(self.output_neurons, [self]) self.timing_controller.set_connections(connections) self.done_processing = False
class FeedForward(object): inputs = [] def __init__(self, in_n, out_n, hidden): self.result = {} self.answers = None self.timing_controller = TimingController() self.input_neurons = make_neurons(in_n, self) self.output_neurons = make_neurons(out_n, self) self.hidden_neurons = make_neurons(hidden, self) self.timing_controller.set_neurons(self.input_neurons + self.output_neurons + self.hidden_neurons) # now go through and connect them all... connections = make_connections(self.input_neurons, self.hidden_neurons) connections = connections + make_connections(self.hidden_neurons, self.output_neurons) connections = connections + make_connections(self.output_neurons, [self]) self.timing_controller.set_connections(connections) self.done_processing = False def process_input(self, i, a): # inputs should be the same dimension as our input_neuron array if len(i) != len(self.input_neurons): raise IndexError("Input does not have the same number of items as the net has input neurons.") if len(a) != len(self.output_neurons): raise IndexError("Answer does not have the same number of items as the net has output neurons.") # Set our answers self.answers = a # proecess our inputs for x in range(len(i)): value = i[x] neuron = self.input_neurons[x] neuron.receive_signal(signal=value, sender=self) self.timing_controller.start() def receive_signal(self, sender=None, signal=None): # on output, the output neuron should call this with the result. self.result[sender] = signal if len(self.result) == len(self.answers): print "Guesses for answers", self.answers for x in range(len(self.output_neurons)): neuron = self.output_neurons[x] answer = self.answers[x] # let's get a percentage of error. # if it's positive, we're under, if it ended up negative, we were over. correction = 1 if answer == 0: error_percent = self.result[neuron] else: error_percent = answer / self.result[neuron] if answer <= self.result[neuron]: correction = 1 - (error_percent / 10) else: correction = 1 + (error_percent / 10) print "Answer was: %s, correct answer was: %s, error was: %s" % ( self.result[neuron], answer, error_percent, ) print correction neuron.learn(correction) # we're done, break the while loop in process_input self.timing_controller.stop() self.result = {}