Example #1
0
    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
Example #2
0
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 = {}