Cranium
1.0.0
matrix.h
لتمكين وظيفة BLAS sgemm
من أجل الضرب السريع للمصفوفات. نظرًا لأن Cranium هو رأس فقط، فما عليك سوى نسخ دليل src
إلى مشروعك، و #include "src/cranium.h"
لبدء استخدامه.
تبعية المترجم المطلوبة الوحيدة هي من رأس
، لذا قم بالتجميع باستخدام -lm
.
إذا كنت تستخدم CBLAS، فستحتاج أيضًا إلى الترجمة باستخدام -lcblas
وتضمين المسار، عبر -I
، إلى أي مكان يوجد فيه تطبيق BLAS لجهازك. وتشمل تلك الشائعة OpenBLAS وATLAS.
لقد تم اختباره للعمل بشكل جيد تمامًا مع أي مستوى من تحسين دول مجلس التعاون الخليجي، لذا لا تتردد في استخدامها.
#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 %fn" , 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 );
لإجراء الاختبارات، ابحث في مجلد tests
.
يحتوي Makefile
على أوامر لتشغيل كل دفعة من اختبارات الوحدة، أو جميعها مرة واحدة.
لا تتردد في إرسال طلب سحب إذا كنت تريد إضافة أي ميزات أو إذا وجدت خطأ.
تحقق من علامة تبويب المشكلات لمعرفة بعض الأشياء المحتملة التي يمكنك القيام بها.