A lightweight C library for creating, training, and evaluating simple neural networks with customizable initialization methods. This library supports basic forward and backward propagation, sigmoid activation, data handling, and model saving/loading.
- Custom Initialization Techniques: Supports zero, random, and Xavier initialization.
- Forward and Backward Propagation: Implements core functions for feedforward and backpropagation.
- Data Handling: Functions to initialize, normalize, partition, and describe data.
- Model Serialization: Save and load model configurations to/from files.
- Model Initialization: Set input, hidden, and output sizes with your preferred initialization method.
- Training and Testing: Use train and test functions with Data and Parameters structures to train the model.
- Model Persistence: Save and load models using save_model and load_model.
- Model: Represents the neural network with layer sizes and weight initialization.
- Data: Holds data samples and labels for training/testing.
- Parameters: Configurable training parameters.
- Model Initialization:
initialize_model() - Forward and Backward Propagation:
forward(),backward() - Data Manipulation:
normalize_data(),partition_data(),describe_data() - Model Persistence:
save_model(),load_model()
git submodule update --init --recursive
bash build.sh#include "malpractice.h"
int main() {
// Model parameters
size_t input_size = 784, hidden_size = 128, output_size = 10;
Model_InitTechnique init_tech = Model_Init_Xavier;
Model *model = initialize_model(input_size, hidden_size, output_size, init_tech);
// Load data (replace with actual loading logic)
Data *data = zero_initialize_data(input_size, 100);
// Set training parameters
Parameters params = {.learning_rate = 0.01, .epochs = 1000, .log_train_metrics = 1};
// Train and evaluate
train(data, params, model);
test(data, model);
// Save model
save_model(model, "model.bin");
// Cleanup
deinitialize_data(data);
deinitialize_model(model);
return 0;
}