File size: 2,035 Bytes
b012e8c | 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 62 63 64 65 66 | // import { MnistData } from './MNIST_dataset.js';
/**
* Loads and preprocesses MNIST dataset for neural network training
* Reshapes flat image arrays into column vectors and formats labels
* @returns {Promise<{trainingData: Array, testData: Array}>} Preprocessed training and test data
*/
async function preprocessMNISTData() {
const IMAGE_SIZE = 784;
const NUM_CLASSES = 10;
const NUM_TRAIN_ELEMENTS = 55000;
const NUM_TEST_ELEMENTS = 10000;
// Load MNIST data from remote sources
const mnistData = new MnistData();
await mnistData.load();
// Convert training data to format expected by Network class
const trainingData = [];
for (let i = 0; i < NUM_TRAIN_ELEMENTS; i++) {
const imageStart = i * IMAGE_SIZE;
const labelStart = i * NUM_CLASSES;
// Reshape image from flat array into column vector [[val], [val], ...]
const x = [];
for (let j = 0; j < IMAGE_SIZE; j++) {
x.push([mnistData.trainImages[imageStart + j]]);
}
// Extract one-hot encoded label as column vector
const y = [];
for (let j = 0; j < NUM_CLASSES; j++) {
y.push([mnistData.trainLabels[labelStart + j]]);
}
trainingData.push([x, y]);
}
// Convert test data to format expected by Network class
const testData = [];
for (let i = 0; i < NUM_TEST_ELEMENTS; i++) {
const imageStart = i * IMAGE_SIZE;
const labelStart = i * NUM_CLASSES;
// Reshape image from flat array into column vector [[val], [val], ...]
const x = [];
for (let j = 0; j < IMAGE_SIZE; j++) {
x.push([mnistData.testImages[imageStart + j]]);
}
// Extract one-hot encoded label as column vector
const y = [];
for (let j = 0; j < NUM_CLASSES; j++) {
y.push([mnistData.testLabels[labelStart + j]]);
}
testData.push([x, y]);
}
return { trainingData, testData };
}
|