matrix.h
untuk mengaktifkan fungsi sgemm
BLAS untuk perkalian matriks dengan cepat. Karena Cranium hanya bersifat header, cukup salin direktori src
ke dalam proyek Anda, dan #include "src/cranium.h"
untuk mulai menggunakannya.
Ketergantungan kompiler yang diperlukan hanya dari header
, jadi kompilasi dengan -lm
.
Jika Anda menggunakan CBLAS, Anda juga perlu mengkompilasi dengan -lcblas
dan menyertakan, melalui -I
, jalur ke mana pun implementasi BLAS mesin Anda berada. Yang umum termasuk OpenBLAS dan ATLAS.
Ini telah diuji untuk bekerja dengan baik pada tingkat optimasi gcc apa pun, jadi silakan menggunakannya.
#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 );
Untuk menjalankan tes, lihat di folder tests
.
Makefile
memiliki perintah untuk menjalankan setiap kumpulan pengujian unit, atau semuanya sekaligus.
Jangan ragu untuk mengirimkan permintaan tarik jika Anda ingin menambahkan fitur apa pun atau jika Anda menemukan bug.
Periksa tab masalah untuk mengetahui beberapa hal yang mungkin dapat dilakukan.