/
mlp.js
61 lines (46 loc) · 1.16 KB
/
mlp.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import { Value } from '../engine.js'
import { MLP } from '../neuron.js'
/**
* This is the main example used in the tutorial
*/
let log = console.log
let n = new MLP(3, [4, 4, 1])
let xs = [
[2.0, 3.0, -1.0],
[3.0,-1.0, 0.5],
[0.5, 1.0, 1.0],
[1.0, 1.0, -1.0],
]
let ys = [1.0,-1.0, -1.0, 1.0]
let last_pred = []
function train(round) {
log("Training round: " + round)
for (let i = 0; i < 20; i++) {
let ypred = []
xs.forEach(x => {
ypred.push(n.forward(x))
})
let loss_total = new Value(0.0, [], '', 'loss_total');
for (let i = 0; i < ys.length; i++) {
let loss = new Value(ys[i], [], '', 'loss');
loss = loss.sub(ypred[i]).pow(2)
loss_total = loss_total.add(loss)
}
for (let p of n.parameters()) {
p.grad = 0.0
}
loss_total.backward()
for (let p of n.parameters()) {
p.data += -0.05 * p.grad
}
log(i, loss_total.data)
last_pred = ypred
}
}
for (let i = 0; i < 4; i++) {
train(i)
}
log("Predictions after training")
for (let p of last_pred) {
log(p.data)
}