{
const features = ds.mnist.map((instance) => instance.features);
const { grids, imageHeight, imageWidth } = generateGrid({
width: width,
height: height,
rows: 20,
cols: 20
});
const tensorFeatures = tf.tensor(features);
let iteration = 0;
for await (const assignments of tsneGrid(tensorFeatures, grids)) {
const useableFormat = assignments.map((ass, i) => {
const instance = ds.mnist[ass];
return { id: instance.filename, grid: grids[i] };
});
svg
.selectAll("image")
.data(useableFormat)
.join("image")
.attr("x", (d) => d.grid[0])
.attr("y", (d) => d.grid[1])
.attr("width", imageWidth)
.attr("height", imageHeight)
.attr("href", (d) => `${settings.href}/${d.id}`);
progressSvg
.select("rect")
.attr("width", (iteration++ / settings.iterations.tsne) * width);
}
}