← Open Source
100

Cranium

🤖 A portable, header-only, artificial neural network library written in C99.

Model DevelopmentDeep Learning FrameworksC
Open on GitHub
Momentum
+0stars in 24 hours0.0%
600
Stars
56
Forks
+0
This week
2
Contributors
Created 2016-12-25 · Updated 2026-10-13 · #16293 today
Top developers
100bedder

100/Cranium is ranked 16,293 with 600 stars.

Same-category comparison

100/Cranium is ranked 16,293 among these 8 peers; xg-chu/GAGAvatar is ranked 16,292.

Same-category comparison
NameRankMetrics
isarandi/metrabs16,283
Language:
Python
Stars:
601
Forks:
86
Description:
Estimate absolute 3D human poses from RGB images.
isht7/pytorch-deeplab-resnet16,284
Language:
Python
Stars:
601
Forks:
115
Description:
DeepLab resnet v2 model in pytorch.
thousandbrainsproject/tbp.monty16,291
Language:
Python
Stars:
601
Forks:
351
Description:
Monty is a sensorimotor learning framework based on the thousand brains theory of the neocortex.
xg-chu/GAGAvatar16,292
Language:
Python
Stars:
601
Forks:
60
Description:
[NeurIPS 2024] Generalizable and Animatable Gaussian Head Avatar.
HarryVolek/PyTorch_Speaker_Verification16,295
Language:
Python
Stars:
600
Forks:
163
Description:
PyTorch implementation of "Generalized End-to-End Loss for Speaker Verification" by Wan, Li et al.
JiahuiYu/wdsr_ntire201816,296
Language:
Python
Stars:
600
Forks:
119
Description:
Code of our winning entry to NTIRE super-resolution challenge, CVPR 2018.
RaphaelMeudec/deblur-gan16,297
Language:
Python
Stars:
600
Forks:
247
Description:
Keras implementation of "DeblurGAN: Blind Motion Deblurring Using Conditional Adversarial Networks".
jostmey/rwa16,301
Language:
Python
Stars:
600
Forks:
60
Description:
Machine Learning on Sequential Data Using a Recurrent Weighted Average.
Key parameters and specifications
Key parameters and specifications
ParameterValue
LanguageC
CategoryModel Development
SubcategoryDeep Learning Frameworks
Stars600
Forks56
Contributors2
Created date2016-12-25
Updated date2026-10-13
Stars in 1 day0
Stars in 7 days0
Rank16,293
Previous rank16,083
Rank change-210
7-day stars rank15,453
Previous 7-day stars rank15,463
7-day stars rank change10
Total stars rank16,781
Previous total stars rank16,757
Total stars rank change-24
CountryUSA
README summary

*Cranium* is a portable, header-only, feedforward artificial neural network library written in vanilla C99. It supports fully-connected networks of arbitrary depth and structure, and should be reasonably fast as it uses a matrix-based approach to calculations. It is particularly suitable for low-resource machines or environments in which additional dependencies cannot be installed. Simply uncomment line 7 in to enable the BLAS function for fast matrix multiplication. Check out the detailed documentation here for information on individual

structures and functions. Features **Activation functions** **Loss functions** **Optimization algorithms** **L2 Regularization** **Learning rate annealing** **Simple momentum** **Fan-in weight initialization** **CBLAS support for fast matrix multiplication** **Serializable networks** Usage Since Cranium is header-only, simply copy the directory into your project, and to begin using it. Its only required compiler dependency is from the header, so compile with . If you are using CBLAS, you will also need to compile with and include, via , the path to wherever your particular

machine's BLAS implementation is. It has been tested to work perfectly fine with any level of gcc optimization, so feel free to use them. Example Building and Testing To run tests, look in the folder. The has commands to run each batch of unit tests, or all of them at once. Contributing Feel free to send a pull request if you want to add any features or if you find a bug. Check the issues tab for some potential things

to do.

Frequently asked questions

How many stars and forks are recorded?

100/Cranium has 600 stars and 56 forks.

What is the repository rank?

100/Cranium is ranked 16,293.

What language and category are recorded?

100/Cranium has 600 stars, uses C and belongs to Model Development.

Which repository is closest in rank?

100/Cranium is compared with xg-chu/GAGAvatar, ranked 16,292 with 601 stars.

README
 ![](docs/image.png) 

Cranium is a portable, header-only, feedforward artificial neural network library written in vanilla C99.

It supports fully-connected networks of arbitrary depth and structure, and should be reasonably fast as it uses a matrix-based approach to calculations. It is particularly suitable for low-resource machines or environments in which additional dependencies cannot be installed.

Cranium supports CBLAS integration. Simply uncomment line 7 in matrix.h to enable the BLAS sgemm function for fast matrix multiplication.

Check out the detailed documentation here for information on individual structures and functions.

Features

  • Activation functions
    • sigmoid
    • ReLU
    • tanh
    • softmax (classification)
    • linear (regression)
  • Loss functions
    • Cross-entropy loss (classification)
    • Mean squared error (regression)
  • Optimization algorithms
    • Batch Gradient Descent
    • Stochastic Gradient Descent
    • Mini-Batch Stochastic Gradient Descent
  • L2 Regularization
  • Learning rate annealing
  • Simple momentum
  • Fan-in weight initialization
  • CBLAS support for fast matrix multiplication
  • Serializable networks

Usage

Since Cranium is header-only, simply copy the src directory into your project, and #include "src/cranium.h" to begin using it.

Its only required compiler dependency is from the `````` header, so compile with -lm.

If you are using CBLAS, you will also need to compile with -lcblas and include, via -I, the path to wherever your particular machine's BLAS implementation is. Common ones include OpenBLAS and ATLAS.

It has been tested to work perfectly fine with any level of gcc optimization, so feel free to use them.

Example

#include "cranium.h"

/*
This basic example program is the skeleton of a classification problem.
The training data should be in matrix form, where each row is a data point, and
    each column is a feature. 
The training classes should be in matrix form, where the ith row corresponds to
    the ith training example, and each column is a 1 if it is of that class, and
    0 otherwise. Each example may only be of 1 class.
*/

// create training data and target values (data collection not shown)
int rows, features, classes;
float** training;
float** classes;

// create datasets to hold the data
DataSet* trainingData = createDataSet(rows, features, training);
DataSet* trainingClasses = createDataSet(rows, classes, classes);

// create network with 2 input neurons, 1 hidden layer with sigmoid
// activation function and 5 neurons, and 2 output neurons with softmax 
// activation function
srand(time(NULL));
size_t hiddenSize[] = {5};
Activation hiddenActivation[] = {sigmoid};
Network* net = createNetwork(2, 1, hiddenSize, hiddenActivation, 2, softmax);

// train network with cross-entropy loss using Mini-Batch SGD
ParameterSet params;
params.network = net;
params.data = trainingData;
params.classes = trainingClasses;
params.lossFunction = CROSS_ENTROPY_LOSS;
params.batchSize = 20;
params.learningRate = .01;
params.searchTime = 5000;
params.regularizationStrength = .001;
params.momentumFactor = .9;
params.maxIters = 10000;
params.shuffle = 1;
params.verbose = 1;
optimize(params);

// test accuracy of network after training
printf("Accuracy is %f\n", accuracy(net, trainingData, trainingClasses));

// get network's predictions on input data after training
forwardPass(net, trainingData);
int* predictions = predict(net);
free(predictions);

// save network to a file
saveNetwork(net, "network");

// free network and data
destroyNetwork(net);
destroyDataSet(trainingData);
destroyDataSet(trainingClasses);

// load previous network from file
Network* previousNet = readNetwork("network");
destroyNetwork(previousNet);

Building and Testing

To run tests, look in the tests folder.

The Makefile has commands to run each batch of unit tests, or all of them at once.

Contributing

Feel free to send a pull request if you want to add any features or if you find a bug.

Check the issues tab for some potential things to do.

Nearby in the ranking
Similar items