Exemple #1
0
    def train(self, arr, target):
        # INPUT => HIDDEN
        input = Matrix.array_to_matrix(arr)
        hidden = Matrix.multiply(self.ih_weights, input)
        hidden = Matrix.add(hidden, self.ih_biases)

        hidden.map(sigmoid)

        # HIDDEN => OUTPUT
        output = Matrix.multiply(self.ho_weights, hidden)
        output = Matrix.add(output, self.ho_biases)

        output.map(sigmoid)

        # BACKPROPAGATION

        # OUTPUT => HIDDEN
        expected = Matrix.array_to_matrix(target)
        output_error = Matrix.subtract(expected, output)
        d_output = Matrix.map(output, dsigmoid)
        hidden_T = Matrix.transpose(hidden)

        gradient = Matrix.hadamard(d_output, output_error)
        gradient = Matrix.scalar_multiply(gradient, self.learning_rate)

        # Apply to ho_biases
        self.ho_biases = Matrix.add(self.ho_biases, gradient)
        # Apply to ho_weights
        weights_ho_deltas = Matrix.multiply(gradient, hidden_T)
        self.ho_weights = Matrix.add(self.ho_weights, weights_ho_deltas)

        # HIDDEN => INPUT
        weights_ho_T = Matrix.transpose(self.ho_weights)
        hidden_error = Matrix.multiply(weights_ho_T, output_error)
        d_hidden = Matrix.map(hidden, dsigmoid)
        input_T = Matrix.transpose(input)

        gradient_H = Matrix.hadamard(d_hidden, hidden_error)
        gradient_H = Matrix.scalar_multiply(gradient_H, self.learning_rate)

        # Apply to ih_biases
        self.ih_biases = Matrix.add(self.ih_biases, gradient_H)
        # Apply to ih_weights
        weights_ih_deltas = Matrix.multiply(gradient_H, input_T)
        self.ih_weights = Matrix.add(self.ih_weights, weights_ih_deltas)
Exemple #2
0
    def predict(self, arr):
        # INPUT => HIDDEN
        input = Matrix.array_to_matrix(arr)

        hidden = Matrix.multiply(self.ih_weights, input)
        hidden = Matrix.add(hidden, self.ih_biases)

        hidden.map(sigmoid)

        # HIDDEN => OUTPUT
        output = Matrix.multiply(self.ho_weights, hidden)
        output = Matrix.add(output, self.ho_biases)
        output.map(sigmoid)
        output = Matrix.matrix_to_array(output)

        return output