loss = () => {
const inputs = data.map(([x, y]) => [new Value(x), new Value(y)]);
const scores = inputs.map(input => model._call(input));
const yb = data.map(([,,y]) => y);
const losses = util.zip(yb, scores).map(([yi, scorei]) => scorei.mult(-yi).add(1).relu());
const dataLoss = losses.reduce((sum, v) => sum.add(v), new Value(0.0)).mult(1.0 / losses.length);
const alpha = 1e-4;
const regLoss = model.parameters().reduce((sum, p) => sum.add(p.mult(p)), new Value(0.0)).mult(alpha);
const totalLoss = dataLoss.add(regLoss);
const accuracy = util.zip(yb, scores).map(([yi, scorei]) => +(yi > 0 === scorei.datum > 0));
return { totalLoss, accuracy: accuracy.reduce((sum, v) => sum + v, 0) / accuracy.length }
}