Datasets

AodhML provides built-in dataset types for loading, batching, and transforming training data.

Prototype Status: Dataset types are defined but loading from files is not yet implemented. Use in-memory arrays for now.

Dataset Type

import "std:dataset"

type Dataset<X, Y> = struct {
    data: [X],
    labels: [Y],
}

fn Dataset::len(self) -> u32 {
    return self.data.len()
}

fn Dataset::get(self, index: u32) -> (X, Y) {
    return (self.data[index], self.labels[index])
}

Batching

fn batch(dataset: Dataset<Tensor<f32>, Tensor<f32>>, size: u32) -> [(Tensor<f32>, Tensor<f32>)] {
    let batches = []
    let n = dataset.len()

    for i in 0..n/size {
        let start = i * size
        let end = start + size
        let x_batch = stack(dataset.data[start..end])
        let y_batch = stack(dataset.labels[start..end])
        batches.push((x_batch, y_batch))
    }

    return batches
}

DataLoader

// Planned for v0.3.0
let loader = DataLoader::new(
    dataset,
    batch_size: 32,
    shuffle: true,
    num_workers: 4,
)

for batch in loader {
    let (x, y) = batch
    let pred = model.forward(x)
    // ...
}