100 / cranium Goto Github PK
View Code? Open in Web Editor NEW๐ค A portable, header-only, artificial neural network library written in C99
Home Page: https://100.github.io/Cranium/
License: MIT License
๐ค A portable, header-only, artificial neural network library written in C99
Home Page: https://100.github.io/Cranium/
License: MIT License
I have rewritten it to work on everything. GPU, Tensorflow, Eigen, PyTorch. You name it, cranium now works on it. Thanks for you neural network.
This will enable BLAS implementations to work with the library
I think there is an error in the example in the README.md file:
int rows, features, classes;
float** training;
float** classes;
An int variable and a quadratic pointer are both defined with the same name. I think the name of the variable defined in int
type and named classes
should be cols
.
You can apply the fix as follows. You need to edit the other rows affected by this edit as well.
/* In the line below, the "classes" variable has been updated to "cols". */
int rows, features, cols;
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.
This isn't clear to me. Let's say I have a training data set with 8 features
And I want them classified into 4 classes
Training - rows of eight columns one feature per column
1,2,3,4,5,6,7,8
6,2,3,4,7,6,5,4
6,2,3,4,4,5,5,4
3,4,7,6,5,4,3,2
2,3,4,5,6,4,3,3
Classifications - since I have four classes I would think this has 4 columns, each column indicating which class it is in
0,0,1,0
1,0,0,0
1,0,0,0
0,1,0,0
0,0,01
That's five rows and 4 columns. One column per class.
Create network would be:
createNetwork(8, 1, hiddenSizeReg, hiddenActivationsReg, 4, linear);
Network with 8 inputs 1 hidden layer and 4 outputs (1 per class)
But accuracy requires this:
assert(data->cols == network->layers[network->numLayers - 1]->size);
Can you give a better example?
Thanks
Such as the various ReLU variants
This entails adding the raw functions for them as well as adding entries for them in the serialization/deserialization functions
Cannot be compiled with MSVC. Fix: variable length arrays declared on stack can be replaced with memory allocation using alloca(), e.g.
Matrix* errori[network->numLayers];
declaration in batchGradientDescent() (optimizer.h) can be replaced by
Matrix** errori = (Matrix**)alloca(network->numLayers * sizeof(Matrix*));
In order to support being used in more than one compilation unit in a C project ( including it in more than one .c file ), you need to apply the term "static" to all functions defined in the headers. I don't see any global data structures, which is good.
For example, given main.c of
#include "cranium/cranium.h"
int main( int argc, char ** argv ){
return 0;
}
and an other.c of
#include "cranium/cranium.h"
int otherfn( void ){
return 4 ;
}
you will receive a tirade of errors
$ gcc main.c other.c -lm 2>&1 | head -20
/tmp/ccuIMzd4.o: In function `createMatrix':
other.c:(.text+0x0): multiple definition of `createMatrix'
/tmp/ccpuiGmt.o:main.c:(.text+0x0): first defined here
/tmp/ccuIMzd4.o: In function `createMatrixZeroes':
other.c:(.text+0x72): multiple definition of `createMatrixZeroes'
/tmp/ccpuiGmt.o:main.c:(.text+0x72): first defined here
/tmp/ccuIMzd4.o: In function `createBatches':
other.c:(.text+0x13b): multiple definition of `createBatches'
/tmp/ccpuiGmt.o:main.c:(.text+0x13b): first defined here
/tmp/ccuIMzd4.o: In function `copyValuesInto':
other.c:(.text+0x226): multiple definition of `copyValuesInto'
/tmp/ccpuiGmt.o:main.c:(.text+0x226): first defined here
/tmp/ccuIMzd4.o: In function `printMatrix':
other.c:(.text+0x2e3): multiple definition of `printMatrix'
/tmp/ccpuiGmt.o:main.c:(.text+0x2e3): first defined here
/tmp/ccuIMzd4.o: In function `zeroMatrix':
other.c:(.text+0x382): multiple definition of `zeroMatrix'
/tmp/ccpuiGmt.o:main.c:(.text+0x382): first defined here
/tmp/ccuIMzd4.o: In function `transpose':
other.c:(.text+0x3e4): multiple definition of `transpose'
etc.
All functions, macros and datatypes defined by cranium should have a prefix associated with them to avoid having cranium and another library's defined functions conflict during compilation.
For example, you defined MAX in FUNCTION_H, which may conflict with a differently defined MAX from another projects headers. Instead CRANIUM_MAX(...) should be used. You may want to do this with your template guards as well ( CRANIUM_FUNCTION_H ) to avoid a situation where a user would find your header or another library's header mysteriously not being included because both check for and define the same macro definition in their template guards.
Would you like to add more error handling for return values from functions like the following?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.