in src/playground.ts [796:838]
function updateDecisionBoundary(network: nn.Node[][], firstTime: boolean) {
if (firstTime) {
boundary = {};
nn.forEachNode(network, true, node => {
boundary[node.id] = new Array(DENSITY);
});
// Go through all predefined inputs.
for (let nodeId in INPUTS) {
boundary[nodeId] = new Array(DENSITY);
}
}
let xScale = d3.scale.linear().domain([0, DENSITY - 1]).range(xDomain);
let yScale = d3.scale.linear().domain([DENSITY - 1, 0]).range(xDomain);
let i = 0, j = 0;
for (i = 0; i < DENSITY; i++) {
if (firstTime) {
nn.forEachNode(network, true, node => {
boundary[node.id][i] = new Array(DENSITY);
});
// Go through all predefined inputs.
for (let nodeId in INPUTS) {
boundary[nodeId][i] = new Array(DENSITY);
}
}
for (j = 0; j < DENSITY; j++) {
// 1 for points inside the circle, and 0 for points outside the circle.
let x = xScale(i);
let y = yScale(j);
let input = constructInput(x, y);
nn.forwardProp(network, input);
nn.forEachNode(network, true, node => {
boundary[node.id][i][j] = node.output;
});
if (firstTime) {
// Go through all predefined inputs.
for (let nodeId in INPUTS) {
boundary[nodeId][i][j] = INPUTS[nodeId].f(x, y);
}
}
}
}
}