MCPcopy Create free account
hub / github.com/arrayfire/arrayfire / back_propagate

Method back_propagate

examples/machine_learning/neural_network.cpp:91–116  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

89}
90
91void ann::back_propagate(const vector<array> signal, const array &target,
92 const double &alpha) {
93 // Get error for output layer
94 array out = signal[num_layers - 1];
95 array err = (out - target);
96
97 int m = target.dims(0);
98
99 for (int i = num_layers - 2; i >= 0; i--) {
100 array in = add_bias(signal[i]);
101 array delta = (deriv(out) * err).T();
102
103 // Adjust weights
104 array tg = alpha * matmul(delta, in);
105 array grad = -(tg) / m;
106 weights[i] += grad.T();
107
108 // Input to current layer is output of previous
109 out = signal[i];
110
111 err = matmulTT(delta, weights[i]);
112
113 // Remove the error of bias and propagate backward
114 err = err(span, seq(1, out.dims(1)));
115 }
116}
117
118ann::ann(vector<int> layers, double range, dtype dt)
119 : num_layers(layers.size()), weights(layers.size() - 1), datatype(dt) {

Callers

nothing calls this directly

Calls 6

matmulTTFunction · 0.85
seqClass · 0.85
TMethod · 0.80
derivFunction · 0.70
matmulFunction · 0.50
dimsMethod · 0.45

Tested by

no test coverage detected