Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public void backPropagate(double[] desiredOutput) {
- if(desiredOutput.length != network.get(network.size()-1).size())
- throw new IllegalArgumentException("Invalid number of outputs");
- double outputError = 0;
- //start at output layer
- for(int i = network.size()-1; i > 0; --i) {
- for(int j = 0; j < network.get(i).size(); ++j) {
- Neuron n = network.get(i).get(j);
- //calculate errors
- if(i == network.size()-1) {//output neuron
- n.setError(activator.fprime(n.getValue()) * (desiredOutput[j] - n.getValue()));
- outputError += n.getError();
- }
- else {
- double w = 0;
- for(Link l : n.forward) { w += l.weight; }
- n.setError(activator.fprime(n.getValue()) * w * outputError);
- }
- //adjust weights
- for(Link l : n.backward) { l.weight += n.getError() * l.prev.getValue(); }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement