def predict(self, input_array): inputs = Matrix.fromArray(input_array) hidden = Matrix.algebra_multiply(self.weights_inputs_hidden, inputs) hidden.add(self.bias_hidden) hidden.map(sigmoid) output = Matrix.algebra_multiply(self.weights_hidden_outputs, hidden) output.add(self.bias_output) output.map(sigmoid) return output.toArray()
def train(self, inputs_array, targets): inputs = Matrix.fromArray(inputs_array) hidden = Matrix.algebra_multiply(self.weights_inputs_hidden, inputs) hidden.add(self.bias_hidden) hidden.map(sigmoid) outputs = Matrix.algebra_multiply(self.weights_hidden_outputs, hidden) outputs.add(self.bias_output) outputs.map(sigmoid) target = Matrix.fromArray(targets) output_errors = Matrix.sub(target, outputs) gradients = Matrix.staticMap(outputs, dsigmoid) gradients.multiply(output_errors) gradients.multiply(self.learning_rate) hidden_t = Matrix.transpose(hidden) weight_hidden_out_deltas = Matrix.algebra_multiply(gradients, hidden_t) self.weights_hidden_outputs.add(weight_hidden_out_deltas) self.bias_output.add(gradients) who_t = Matrix.transpose(self.weights_hidden_outputs) hidden_errors = Matrix.algebra_multiply(who_t, output_errors) hidden_gradient = Matrix.staticMap(hidden, dsigmoid) hidden_gradient.multiply(hidden_errors) hidden_gradient.multiply(self.learning_rate) inputs_t = Matrix.transpose(inputs) weight_ih_deltas = Matrix.algebra_multiply(hidden_gradient, inputs_t) self.weights_inputs_hidden.add(weight_ih_deltas) self.bias_hidden.add(hidden_gradient)