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 |
260 if (config.
begin()->second !=
"none") {
261 std::cerr <<
"ERROR (" << __func__ <<
") : ";
263 <<
"First layer can't have activation other than none got "
264 << config.
begin()->second;
269 if (config.
size() <= 1) {
270 std::cerr <<
"ERROR (" << __func__ <<
") : ";
271 std::cerr <<
"Invalid size of network, ";
272 std::cerr <<
"Atleast two layers are required";
276 for (
size_t i = 0; i < config.
size(); i++) {
277 layers.emplace_back(neural_network::layers::DenseLayer(
278 config[i].first, config[i].second, kernals[i]));
◆ 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) |
316 if (config.
begin()->second !=
"none") {
317 std::cerr <<
"ERROR (" << __func__ <<
") : ";
319 <<
"First layer can't have activation other than none got "
320 << config.
begin()->second;
325 if (config.
size() <= 1) {
326 std::cerr <<
"ERROR (" << __func__ <<
") : ";
327 std::cerr <<
"Invalid size of network, ";
328 std::cerr <<
"Atleast two layers are required";
333 layers.push_back(neural_network::layers::DenseLayer(
334 config[0].first, config[0].second,
335 {config[0].first, config[0].first},
false));
337 for (
size_t i = 1; i < config.
size(); i++) {
338 layers.push_back(neural_network::layers::DenseLayer(
339 config[i].first, config[i].second,
340 {config[i - 1].first, config[i].first},
true));
◆ 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
-
293 for (
const auto &l :
layers) {
294 current_pass =
multiply(current_pass, l.kernal);
295 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) |
609 double acc = 0, loss = 0;
610 for (
size_t i = 0; i < X.
size(); i++) {
620 neural_network::util_functions::square) *
626 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) |
491 if (X.
size() != Y.size()) {
492 std::cerr <<
"ERROR (" << __func__ <<
") : ";
497 for (
int epoch = 1; epoch <= epochs; epoch++) {
507 for (
size_t batch_start = 0; batch_start < X.
size();
508 batch_start += batch_size) {
509 for (
size_t i = batch_start;
510 i <
std::min(X.
size(), batch_start + batch_size); i++) {
519 for (
size_t i = 0; i < gradients.
size(); i++) {
524 cur_error = predicted - Y[i];
527 cur_error, neural_network::util_functions::square));
533 for (
size_t j = this->
layers.size() - 1; j >= 1; j--) {
539 this->
layers[j].dactivation_function));
546 gradients[j] = gradients[j] + grad / double(batch_size);
549 for (
size_t j = this->
layers.size() - 1; j >= 1; j--) {
552 gradients[j] * learning_rate;
560 std::chrono::duration_cast<std::chrono::microseconds>(stop -
566 std::cout <<
"Training: Epoch " << epoch <<
'/' << epochs;
569 std::cout <<
", Taken time: " << duration.count() / 1e6
◆ 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) |
596 this->
fit(
data.first,
data.second, epochs, learning_rate, batch_size,
◆ 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
385 in_file.
open(file_name.
c_str(), std::ios::in);
388 std::cerr <<
"ERROR (" << __func__ <<
") : ";
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];
422 y_data.resize(this->
layers.back().neurons);
424 if (y_data.size() > 1) {
425 y_data[x_data[x_data.size() - 1]] = 1;
429 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
737 std::cerr <<
"ERROR (" << __func__ <<
") : ";
745 size_t total_layers = 0;
746 in_file >> total_layers;
747 for (
size_t i = 0; i < total_layers; i++) {
750 size_t shape_a = 0, shape_b = 0;
752 in_file >> neurons >> activation >> shape_a >> shape_b;
753 for (
size_t r = 0; r < shape_a; r++) {
755 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_values neurons(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
655 if (file_name.
find(
".model") == file_name.npos) {
656 file_name +=
".model";
661 std::ofstream::out | std::ofstream::trunc);
664 std::cerr <<
"ERROR (" << __func__ <<
") : ";
708 out_file <<
layers.size();
710 for (
const auto &layer : this->
layers) {
711 out_file << layer.neurons <<
' ' << layer.activation <<
std::endl;
712 const auto shape =
get_shape(layer.kernal);
713 out_file << shape.first <<
' ' << shape.second <<
std::endl;
714 for (
const auto &row : layer.kernal) {
715 for (
const auto &val : row) {
716 out_file << val <<
' ';
721 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.
776 <<
"==============================================================="
778 std::cout <<
"\t\t+ MODEL SUMMARY +\t\t\n";
780 <<
"==============================================================="
782 for (
size_t i = 1; i <=
layers.size(); i++) {
787 <<
layers[i - 1].activation;
793 <<
"==============================================================="
The documentation for this class was generated from the following file:
std::vector< std::valarray< T > > apply_function(const std::vector< std::valarray< T >> &A, T(*func)(const T &))
Definition: vector_ops.hpp:329
std::valarray< T > pop_back(const std::valarray< T > &A)
Definition: vector_ops.hpp:119
void equal_shuffle(std::vector< std::vector< std::valarray< T >>> &A, std::vector< std::vector< std::valarray< T >>> &B)
Definition: vector_ops.hpp:136
std::valarray< T > pop_front(const std::valarray< T > &A)
Definition: vector_ops.hpp:102
std::vector< std::valarray< T > > transpose(const std::vector< std::valarray< T >> &A)
Definition: vector_ops.hpp:382
std::array< T, N > shuffle(std::array< T, N > arr)
Definition: bogo_sort.cpp:36
size_t argmax(const std::vector< std::valarray< T >> &A)
Definition: vector_ops.hpp:307
void evaluate(const std::vector< std::vector< std::valarray< double >>> &X, const std::vector< std::vector< std::valarray< double >>> &Y)
Definition: neural_network.cpp:606
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:85
std::vector< std::vector< std::valarray< double > > > __detailed_single_prediction(const std::vector< std::valarray< double >> &X)
Definition: neural_network.cpp:289
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:269
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:382
std::vector< std::valarray< double > > single_predict(const std::vector< std::valarray< double >> &X)
Definition: neural_network.cpp:451
std::pair< size_t, size_t > get_shape(const std::vector< std::valarray< T >> &A)
Definition: vector_ops.hpp:247
This namespace contains layers used in MLP.
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:494
std::vector< std::valarray< T > > multiply(const std::vector< std::valarray< T >> &A, const std::vector< std::valarray< T >> &B)
Definition: vector_ops.hpp:460
void zeroes_initialization(std::vector< std::valarray< T >> &A, const std::pair< size_t, size_t > &shape)
Definition: vector_ops.hpp:213
T sum(const std::vector< std::valarray< T >> &A)
Definition: vector_ops.hpp:232