self.inputs[:, np.newaxis] assert self.weights.shape == gradient.shape self.weights -= gradient*learning_rate def calculate_delta(self): """ Calculate the delta values associated with neurons in this hidden layer. equivalent to g'(a(j))*sum(delta(k)w(kj)) """ next_deltas = self.next_layer.get_deltas() next_weights = self.next_layer.get_weights() next_errors = np.sum(np.tile(next_deltas, (len(next_weights), 1))*\ next_weights, axis=1) return self.output_wrt_inputs()*next_errors if __name__ == "__main__": from output_layer import OutputLayer from functions import * hl = HiddenLayer(2, 2, sigmoid_vectorized, sigmoid_derv_vectorized, 0) ol = OutputLayer(2, 2, sigmoid_vectorized, sigmoid_derv_vectorized, error_derv, 0) hl.set_next_layer(ol) inputs = np.array([-0.7, 0.7]) targets = np.array([0.0, 0.5]) for i in range(10000): print(hl.bias) hl.forward_pass(inputs) ol.forward_pass(hl.outputs) ol.update_weight(targets, 0.5) hl.update_weight(0.4) print(ol.outputs)