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 };
}