|
Algorithms_in_C++
1.0.0
Set of algorithms implemented in C++.
|
|
| | NeuralNetwork ()=default |
| |
| | NeuralNetwork (const std::vector< std::pair< int, std::string >> &config) |
| |
| | NeuralNetwork (const NeuralNetwork &model)=default |
| |
| | ~NeuralNetwork ()=default |
| |
| NeuralNetwork & | operator= (const NeuralNetwork &model)=default |
| |
| | NeuralNetwork (NeuralNetwork &&)=default |
| |
| NeuralNetwork & | operator= (NeuralNetwork &&)=default |
| |
| std::pair< std::vector< std::vector< std::valarray< double > > >, std::vector< std::vector< std::valarray< double > > > > | get_XY_from_csv (const std::string &file_name, const bool &last_label, const bool &normalize, const int &slip_lines=1) |
| |
| std::vector< std::valarray< double > > | single_predict (const std::vector< std::valarray< double >> &X) |
| |
| std::vector< std::vector< std::valarray< double > > > | batch_predict (const std::vector< std::vector< std::valarray< double >>> &X) |
| |
| void | fit (const std::vector< std::vector< std::valarray< double >>> &X_, const std::vector< std::vector< std::valarray< double >>> &Y_, const int &epochs=100, const double &learning_rate=0.01, const size_t &batch_size=32, const bool &shuffle=true) |
| |
| void | fit_from_csv (const std::string &file_name, const bool &last_label, const int &epochs, const double &learning_rate, const bool &normalize, const int &slip_lines=1, const size_t &batch_size=32, const bool &shuffle=true) |
| |
| void | evaluate (const std::vector< std::vector< std::valarray< double >>> &X, const std::vector< std::vector< std::valarray< double >>> &Y) |
| |
| void | evaluate_from_csv (const std::string &file_name, const bool &last_label, const bool &normalize, const int &slip_lines=1) |
| |
| void | save_model (const std::string &_file_name) |
| |
| NeuralNetwork | load_model (const std::string &file_name) |
| |
| void | summary () |
| |
NeuralNetwork class is implements MLP. This class is used by actual user to create and train networks.
◆ NeuralNetwork() [1/5]
Private Constructor for class NeuralNetwork. This constructor is used internally to load model.
- Parameters
-
| config | vector containing pair (neurons, activation) |
| kernals | vector containing all pretrained kernals |
273 if(config.
begin() -> second !=
"none") {
274 std::cerr <<
"ERROR: First layer can't have activation other than none";
279 if(config.
size() <= 1) {
280 std::cerr <<
"ERROR: Invalid size of network, ";
281 std::cerr <<
"Atleast two layers are required";
285 for(
size_t i = 0; i < config.
size(); i++) {
286 layers.emplace_back(neural_network::layers::DenseLayer(config[i].first,
◆ NeuralNetwork() [2/5]
| machine_learning::neural_network::NeuralNetwork::NeuralNetwork |
( |
| ) |
|
|
default |
◆ NeuralNetwork() [3/5]
Constructor for class NeuralNetwork. This constructor is used by user.
- Parameters
-
| config | vector containing pair (neurons, activation) |
324 if(config.
begin() -> second !=
"none") {
325 std::cerr <<
"ERROR: First layer can't have activation other than none";
330 if(config.
size() <= 1) {
331 std::cerr <<
"ERROR: Invalid size of network, ";
332 std::cerr <<
"Atleast two layers are required";
337 layers.push_back(neural_network::layers::DenseLayer(config[0].first,
339 {config[0].first, config[0].first},
342 for(
size_t i = 1; i < config.
size(); i++) {
343 layers.push_back(neural_network::layers::DenseLayer(config[i].first,
345 {config[i - 1].first, config[i].first},
◆ NeuralNetwork() [4/5]
| machine_learning::neural_network::NeuralNetwork::NeuralNetwork |
( |
const NeuralNetwork & |
model | ) |
|
|
default |
Copy Constructor for class NeuralNetwork.
- Parameters
-
| model | instance of class to be copied. |
◆ ~NeuralNetwork()
| machine_learning::neural_network::NeuralNetwork::~NeuralNetwork |
( |
| ) |
|
|
default |
◆ NeuralNetwork() [5/5]
| machine_learning::neural_network::NeuralNetwork::NeuralNetwork |
( |
NeuralNetwork && |
| ) |
|
|
default |
◆ __detailed_single_prediction()
Private function to get detailed predictions (i.e. activated neuron values). This function is used in backpropagation, single predict and batch predict.
- Parameters
-
303 for(
const auto &l :
layers) {
304 current_pass =
multiply(current_pass, l.kernal);
305 current_pass =
apply_function(current_pass, l.activation_function);
◆ batch_predict()
Function to get prediction of model on batch
- Parameters
-
| X | array of feature vectors |
- Returns
- returns predicted values as vector
469 for(
size_t i = 0; i < X.
size(); i++) {
473 return predicted_batch;
◆ evaluate()
Function to evaluate model on supplied data
- Parameters
-
| X | array of feature vectors (input data) |
| Y | array of target values (label) |
597 double acc = 0, loss = 0;
598 for(
size_t i = 0; i < X.
size(); i++) {
607 neural_network::util_functions::square) * 0.5);
612 std::cout <<
"Evaluation: Loss: " << loss;
◆ evaluate_from_csv()
| void machine_learning::neural_network::NeuralNetwork::evaluate_from_csv |
( |
const std::string & |
file_name, |
|
|
const bool & |
last_label, |
|
|
const bool & |
normalize, |
|
|
const int & |
slip_lines = 1 |
|
) |
| |
|
inline |
Function to evaluate model on data stored in csv file
- Parameters
-
| file_name | csv file name |
| last_label | flag for whether label is in first or last column |
| normalize | flag for whether to normalize data |
| slip_lines | number of lines to skip |
◆ fit()
Function to fit model on supplied data
- Parameters
-
| X | array of feature vectors |
| Y | array of target values |
| epochs | number of epochs (default = 100) |
| learning_rate | learning rate (default = 0.01) |
| batch_size | batch size for gradient descent (default = 32) |
| shuffle | flag for whether to shuffle data (default = true) |
493 if (X.
size() != Y.size()) {
498 for (
int epoch = 1; epoch <= epochs; epoch++) {
504 double loss = 0, acc = 0;
506 for(
size_t batch_start = 0; batch_start < X.
size(); batch_start += batch_size) {
507 for(
size_t i = batch_start; i <
std::min(X.
size(), batch_start + batch_size); i++) {
515 for(
size_t i = 0; i < gradients.
size(); i++) {
519 cur_error = predicted - Y[i];
527 for(
size_t j =
this ->
layers.size() - 1; j >= 1; j--) {
531 this ->
layers[j].dactivation_function));
537 gradients[j] = gradients[j] + grad / double(batch_size);
540 for(
size_t j =
this ->
layers.size() - 1; j >= 1; j--) {
543 gradients[j] * learning_rate;
549 auto duration = std::chrono::duration_cast<std::chrono::microseconds>(stop - start);
554 std::cout <<
"Training: Epoch " << epoch <<
'/' << epochs;
557 std::cout <<
", Taken time: " << duration.count() / 1e6 <<
" seconds";
◆ fit_from_csv()
| void machine_learning::neural_network::NeuralNetwork::fit_from_csv |
( |
const std::string & |
file_name, |
|
|
const bool & |
last_label, |
|
|
const int & |
epochs, |
|
|
const double & |
learning_rate, |
|
|
const bool & |
normalize, |
|
|
const int & |
slip_lines = 1, |
|
|
const size_t & |
batch_size = 32, |
|
|
const bool & |
shuffle = true |
|
) |
| |
|
inline |
Function to fit model on data stored in csv file
- Parameters
-
| file_name | csv file name |
| last_label | flag for whether label is in first or last column |
| epochs | number of epochs |
| learning_rate | learning rate |
| normalize | flag for whether to normalize data |
| slip_lines | number of lines to skip |
| batch_size | batch size for gradient descent (default = 32) |
| shuffle | flag for whether to shuffle data (default = true) |
◆ get_XY_from_csv()
Function to get X and Y from csv file (where X = data, Y = label)
- Parameters
-
| file_name | csv file name |
| last_label | flag for whether label is in first or last column |
| normalize | flag for whether to normalize data |
| slip_lines | number of lines to skip |
- Returns
- returns pair of X and Y
392 in_file.
open(file_name.
c_str(), std::ios::in);
396 for(
int i = 0; i < slip_lines; i ++) {
411 y_data.resize(
this ->
layers.back().neurons);
413 if(y_data.size() > 1) {
414 y_data[x_data[x_data.size() - 1]] = 1;
418 y_data[0] = x_data[x_data.size() - 1];
423 y_data.resize(
this ->
layers.back().neurons);
425 if(y_data.size() > 1) {
426 y_data[x_data[x_data.size() - 1]] = 1;
430 y_data[0] = x_data[x_data.size() - 1];
◆ load_model()
Function to load earlier saved model.
- Parameters
-
| file_name | file from which model will be loaded (*.model) |
- Returns
- instance of NeuralNetwork class with pretrained weights
717 size_t total_layers = 0;
718 in_file >> total_layers;
719 for(
size_t i = 0; i < total_layers; i++) {
722 size_t shape_a = 0, shape_b = 0;
724 in_file >> neurons >> activation >> shape_a >> shape_b;
725 for(
size_t r = 0; r < shape_a; r++) {
727 for(
size_t c = 0; c < shape_b; c++) {
◆ operator=() [1/2]
◆ operator=() [2/2]
◆ save_model()
| void machine_learning::neural_network::NeuralNetwork::save_model |
( |
const std::string & |
_file_name | ) |
|
|
inline |
Function to save current model.
- Parameters
-
| file_name | file name to save model (*.model) |
Format in which model is saved:
total_layers neurons(1st neural_network::layers::DenseLayer) activation_name(1st neural_network::layers::DenseLayer) kernal_shape(1st neural_network::layers::DenseLayer) kernal_valuesneurons(Nth neural_network::layers::DenseLayer) activation_name(Nth neural_network::layers::DenseLayer) kernal_shape(Nth neural_network::layers::DenseLayer) kernal_value
For Example, pretrained model with 3 layers:
3
4 none
4 4
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
6 relu
4 6
-1.88963 -3.61165 1.30757 -0.443906 -2.41039 -2.69653
-0.684753 0.0891452 0.795294 -2.39619 2.73377 0.318202
-2.91451 -4.43249 -0.804187 2.51995 -6.97524 -1.07049
-0.571531 -1.81689 -1.24485 1.92264 -2.81322 1.01741
3 sigmoid
6 3
0.390267 -0.391703 -0.0989607
0.499234 -0.564539 -0.28097
0.553386 -0.153974 -1.92493
-2.01336 -0.0219682 1.44145
1.72853 -0.465264 -0.705373
-0.908409 -0.740547 0.376416
642 if(file_name.
find(
".model") == file_name.npos) {
643 file_name +=
".model";
647 out_file.
open(file_name.
c_str(), std::ofstream::out | std::ofstream::trunc);
688 out_file <<
layers.size();
690 for(
const auto &layer :
this ->
layers) {
691 out_file << layer.neurons <<
' ' << layer.activation <<
std::endl;
692 const auto shape =
get_shape(layer.kernal);
693 out_file << shape.first <<
' ' << shape.second <<
std::endl;
694 for(
const auto &row : layer.kernal) {
695 for(
const auto &val : row) {
696 out_file << val <<
' ';
701 std::cout <<
"INFO: Model saved successfully with name : ";
◆ single_predict()
Function to get prediction of model on single sample.
- Parameters
-
| X | array of feature vectors |
- Returns
- returns predictions as vector
◆ summary()
| void machine_learning::neural_network::NeuralNetwork::summary |
( |
| ) |
|
|
inline |
Function to print summary of the network.
744 std::cout <<
"===============================================================" <<
std::endl;
745 std::cout <<
"\t\t+ MODEL SUMMARY +\t\t\n";
746 std::cout <<
"===============================================================" <<
std::endl;
747 for(
size_t i = 1; i <=
layers.size(); i++) {
754 std::cout <<
"===============================================================" <<
std::endl;
The documentation for this class was generated from the following file:
void equal_shuffle(std::vector< std::vector< std::valarray< T >> > &A, std::vector< std::vector< std::valarray< T >> > &B)
Definition: vector_ops.hpp:133
std::vector< std::valarray< T > > apply_function(const std::vector< std::valarray< T >> &A, T(*func)(const T &))
Definition: vector_ops.hpp:315
std::vector< std::valarray< T > > transpose(const std::vector< std::valarray< T >> &A)
Definition: vector_ops.hpp:363
std::valarray< T > pop_back(const std::valarray< T > &A)
Definition: vector_ops.hpp:117
std::valarray< T > pop_front(const std::valarray< T > &A)
Definition: vector_ops.hpp:101
std::array< T, N > shuffle(std::array< T, N > arr)
Definition: bogo_sort.cpp:36
std::vector< std::valarray< T > > hadamard_product(const std::vector< std::valarray< T >> &A, const std::vector< std::valarray< T >> &B)
Definition: vector_ops.hpp:466
std::vector< std::valarray< T > > multiply(const std::vector< std::valarray< T >> &A, const std::vector< std::valarray< T >> &B)
Definition: vector_ops.hpp:434
size_t argmax(const std::vector< std::valarray< T >> &A)
Definition: vector_ops.hpp:296
void evaluate(const std::vector< std::vector< std::valarray< double >>> &X, const std::vector< std::vector< std::valarray< double >>> &Y)
Definition: neural_network.cpp:594
std::vector< std::valarray< double > > single_predict(const std::vector< std::valarray< double >> &X)
Definition: neural_network.cpp:453
void fit(const std::vector< std::vector< std::valarray< double >>> &X_, const std::vector< std::vector< std::valarray< double >>> &Y_, const int &epochs=100, const double &learning_rate=0.01, const size_t &batch_size=32, const bool &shuffle=true)
Definition: neural_network.cpp:485
Various activation functions used in Neural network.
std::valarray< T > insert_element(const std::valarray< T > &A, const T &ele)
Definition: vector_ops.hpp:84
std::vector< std::vector< std::valarray< double > > > __detailed_single_prediction(const std::vector< std::valarray< double >> &X)
Definition: neural_network.cpp:299
std::vector< std::vector< std::valarray< T > > > minmax_scaler(const std::vector< std::vector< std::valarray< T >>> &A, const T &low, const T &high)
Definition: vector_ops.hpp:265
int data[MAX]
test data
Definition: hash_search.cpp:24
T emplace_back(T... args)
std::pair< std::vector< std::vector< std::valarray< double > > >, std::vector< std::vector< std::valarray< double > > > > get_XY_from_csv(const std::string &file_name, const bool &last_label, const bool &normalize, const int &slip_lines=1)
Definition: neural_network.cpp:387
std::pair< size_t, size_t > get_shape(const std::vector< std::valarray< T >> &A)
Definition: vector_ops.hpp:243
This namespace contains layers used in MLP.
void zeroes_initialization(std::vector< std::valarray< T >> &A, const std::pair< size_t, size_t > &shape)
Definition: vector_ops.hpp:209
T sum(const std::vector< std::valarray< T >> &A)
Definition: vector_ops.hpp:228