Download include/sk_model.h from Snapkitty/snapkitty-mlc: direct link, hf CLI and curl.
- Browser
- Download file 6.57 kB
-
https://huggingface.co/Snapkitty/snapkitty-mlc/resolve/main/include/sk_model.h
- Command line
-
hf download hf://Snapkitty/snapkitty-mlc/include/sk_model.h
-
curl -L -o sk_model.h https://huggingface.co/Snapkitty/snapkitty-mlc/resolve/main/include/sk_model.h
6.57 kB
| /* sk_model.h β SnapKitty MLC: computation graph, autograd, training | |
| * | |
| * Design: | |
| * - All allocation is arena-based (no malloc/free in the hot path) | |
| * - Computation graph is built by composing sk_mv_* constructors | |
| * - Topological sort in sk_model_prog_create β forward/backward in O(n) | |
| * - Training: mini-batch SGD with Fisher-Yates shuffle per epoch | |
| * | |
| * Authors: Ahmad Ali Parr, Jessica L. Williams (SNAPKITTYWEST) | |
| * Source: SNAPKITTYAGENT9NOVA/MLC | |
| * License: BSL-1.1 / AGPL-3.0 / MPL-2.0 | |
| */ | |
| /* ββ Variable flags βββββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| typedef enum { | |
| SK_MV_NONE = 0, | |
| SK_MV_REQUIRES_GRAD = (1 << 0), /* accumulate gradients */ | |
| SK_MV_PARAMETER = (1 << 1), /* updated during training */ | |
| SK_MV_INPUT = (1 << 2), /* model input slot */ | |
| SK_MV_OUTPUT = (1 << 3), /* model output slot */ | |
| SK_MV_DESIRED_OUTPUT = (1 << 4), /* ground-truth label slot */ | |
| SK_MV_COST = (1 << 5), /* scalar loss slot */ | |
| } sk_mv_flags; | |
| /* ββ Operation type βββββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| typedef enum { | |
| SK_OP_NULL = 0, | |
| SK_OP_CREATE, | |
| _SK_OP_UNARY_START, | |
| SK_OP_RELU, | |
| SK_OP_SOFTMAX, | |
| _SK_OP_BINARY_START, | |
| SK_OP_ADD, | |
| SK_OP_SUB, | |
| SK_OP_MATMUL, | |
| SK_OP_CROSS_ENTROPY, | |
| } sk_mv_op; | |
| /* ββ Model variable (node in the computation graph) ββββββββββββββββ */ | |
| typedef struct sk_model_var { | |
| u32 index; | |
| u32 flags; | |
| sk_matrix* val; | |
| sk_matrix* grad; | |
| sk_mv_op op; | |
| struct sk_model_var* inputs[SK_MV_MAX_INPUTS]; | |
| } sk_model_var; | |
| /* ββ Ordered execution program (topological sort output) βββββββββββ */ | |
| typedef struct { | |
| sk_model_var** vars; | |
| u32 size; | |
| } sk_model_prog; | |
| /* ββ Model context ββββββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| typedef struct { | |
| u32 num_vars; | |
| sk_model_var* input; | |
| sk_model_var* output; | |
| sk_model_var* desired_output; | |
| sk_model_var* cost; | |
| sk_model_prog forward_prog; | |
| sk_model_prog cost_prog; | |
| } sk_model; | |
| /* ββ Training descriptor ββββββββββββββββββββββββββββββββββββββββββββ */ | |
| typedef struct { | |
| sk_matrix* train_images; | |
| sk_matrix* train_labels; | |
| sk_matrix* test_images; | |
| sk_matrix* test_labels; | |
| u32 epochs; | |
| u32 batch_size; | |
| f32 learning_rate; | |
| } sk_training_desc; | |
| /* ββ Variable constructors ββββββββββββββββββββββββββββββββββββββββββ */ | |
| sk_model_var* sk_mv_create( | |
| sk_arena* arena, sk_model* model, u32 rows, u32 cols, u32 flags | |
| ); | |
| sk_model_var* sk_mv_relu( | |
| sk_arena* arena, sk_model* model, sk_model_var* input, u32 flags | |
| ); | |
| sk_model_var* sk_mv_softmax( | |
| sk_arena* arena, sk_model* model, sk_model_var* input, u32 flags | |
| ); | |
| sk_model_var* sk_mv_add( | |
| sk_arena* arena, sk_model* model, | |
| sk_model_var* a, sk_model_var* b, u32 flags | |
| ); | |
| sk_model_var* sk_mv_sub( | |
| sk_arena* arena, sk_model* model, | |
| sk_model_var* a, sk_model_var* b, u32 flags | |
| ); | |
| sk_model_var* sk_mv_matmul( | |
| sk_arena* arena, sk_model* model, | |
| sk_model_var* a, sk_model_var* b, u32 flags | |
| ); | |
| sk_model_var* sk_mv_cross_entropy( | |
| sk_arena* arena, sk_model* model, | |
| sk_model_var* p, sk_model_var* q, u32 flags | |
| ); | |
| /* ββ Program execution ββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| sk_model_prog sk_model_prog_create( | |
| sk_arena* arena, sk_model* model, sk_model_var* out_var | |
| ); | |
| void sk_model_prog_compute(sk_model_prog* prog); | |
| void sk_model_prog_compute_grads(sk_model_prog* prog); | |
| /* ββ Model lifecycle ββββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| sk_model* sk_model_create(sk_arena* arena); | |
| void sk_model_compile(sk_arena* arena, sk_model* model); | |
| void sk_model_feedforward(sk_model* model); | |
| void sk_model_train(sk_model* model, const sk_training_desc* desc); | |
| /* Compatibility aliases (original names) */ | |