Ejemplo n.º 1
0
    def backprop(layers, outputs=[], learning_rate=1):

        for layer, neurons in reversed(list(enumerate(layers))):
            is_input_layer = layer is 0
            is_top_layer = layer is len(layers) - 1
            if is_top_layer:
                for index, neuron in enumerate(neurons):
                    s = neuron.output * (1 - neuron.output)
                    neuron.ideal_output = 1 if neuron.name in outputs else 0
                    neuron.error = (neuron.ideal_output - neuron.output) * s
                    for i, node in enumerate(layers[layer - 1]):
                        link = Select.link_between(node, neuron)
                        link.weight += ((neuron.error * node.output) * learning_rate)
                        link.save()
            elif is_top_layer and not is_input_layer:
                for index, neuron in enumerate(neurons):
                    error_sum = 0
                    s = neuron.output * (1 - output.neuron)
                    for i, node in enumerate(layers[layer + 1]):
                        link = Select.link_between(neuron, node)
                        error_sum += node.error * link.weight
                    neuron.error = error_sum * s
                    for i, node in enumerate(layers[layer - 1]):
                        link = Select.link_between(node, neuron)
                        link.weight += ((neuron.error * node.output) * learning_rate)
                        link.save()

        return layers
Ejemplo n.º 2
0
 def build_network(network):
     layers = []
     for layer in Select.layers_in(network):
         neuron_list = []
         for pool in Select.pools_in(layer):
             for neuron in Select.neurons_in(pool):
                 neuron_list.append(neuron)
         layers.append(neuron_list)
     return layers
Ejemplo n.º 3
0
    def activate_network(layers, inputs=[]):

        for layer, neurons in enumerate(layers):
            is_input_layer = layer is 0
            for index, neuron in enumerate(neurons):
                if is_input_layer:
                    neuron.output = 1 if neuron.name in inputs else 0
                else:
                    weights = []
                    outputs = []
                    for i, node in enumerate(layers[layer - 1]):
                        outputs.append(node.output)
                        link = Select.link_between(node, neuron)
                        weights.append(link.weight)
                    weighted_sum = Computation.sum(outputs, weights)
                    neuron.output = Computation.activation(weighted_sum)
        return layers