-def result(inputs):
- end_node['inputs'] = inputs[:]
- s = 0
- for i in range(len(inputs)):
- s += inputs[i] * end_node['weights'][i]
- end_node['weighted_biased_input'] = s + end_node['bias']
- end_node['sigmoid_output'] = sigmoid(end_node['weighted_biased_input'])
- return end_node['sigmoid_output']
-
-def backprop(end_result, target, cost):
- d_cost_over_sigmoid_output = 2*(end_result - target)
- for i in range(len(end_node['weights'])):
- d_weighted_biased_input_over_weight = end_node['inputs'][i]
- d_sigmoid_output_over_weighted_biased_input = d_sigmoid(end_node['weighted_biased_input'])
- d_cost_over_weight = d_cost_over_sigmoid_output * d_sigmoid_output_over_weighted_biased_input * d_weighted_biased_input_over_weight
- end_node['weights'][i] -= d_cost_over_weight
- d_cost_over_bias = d_cost_over_sigmoid_output
- end_node['bias'] -= d_cost_over_bias
+class Node:
+
+ def __init__(self, size):
+ self.n_inputs = size
+ self.weights = [0] * self.n_inputs
+ self.bias = 0
+
+ def output(self, inputs):
+ self.inputs = inputs
+ weighted_inputs_sum = 0
+ for i in range(self.n_inputs):
+ weighted_inputs_sum += inputs[i] * self.weights[i]
+ self.weighted_biased_input = weighted_inputs_sum + self.bias
+ self.sigmoid_output = sigmoid(self.weighted_biased_input)
+ return self.sigmoid_output
+
+ def backprop(self, target):
+ d_cost_over_sigmoid_output = 2*(self.sigmoid_output - target)
+ for i in range(self.n_inputs):
+ d_weighted_biased_input_over_weight = self.inputs[i]
+ d_sigmoid_output_over_weighted_biased_input = d_sigmoid(self.weighted_biased_input)
+ d_cost_over_weight = d_cost_over_sigmoid_output * d_sigmoid_output_over_weighted_biased_input * d_weighted_biased_input_over_weight
+ self.weights[i] -= d_cost_over_weight
+ d_cost_over_bias = d_cost_over_sigmoid_output
+ self.bias -= d_cost_over_bias
+
+
+class TrainingUnit:
+
+ def __init__(self, inputs, target):
+ self.inputs = inputs
+ self.target = target