// @BAKE g++ $@ -fpermissive -Wextra -Wpedantic -o $*.out #include <stdlib.h> #include <stdio.h> #include <math.h> #include <time.h> #include <vector> #include <algorithm> #include <numeric> const int TRAINING_SESSIONS = 1000; using namespace std; typedef struct nn { static const int INPUT_COUNT = 2; static const int B = 1; static const int NUMBER_OF_LAYERS = 2; static const int INPUT_SIZE = INPUT_COUNT + B; double weights[INPUT_SIZE][NUMBER_OF_LAYERS]; nn() { this->random_fill(); } ~nn() { this->print(); } void random_fill() { srand((unsigned int)time(NULL)); for (int i = 0; i < INPUT_SIZE; i++) { for (int h = 0; h < NUMBER_OF_LAYERS; h++) { weights[i][h] = ((double)rand() / RAND_MAX) * 2.0 - 1.0; } } } void print() { for (int j = 0; j < NUMBER_OF_LAYERS; j++) { for (int i = 0; i < INPUT_SIZE; i++) { printf("%.4f ", weights[i][j]); } printf("\n"); } } } neural_network_t; typedef struct { int inputs[neural_network_t::INPUT_SIZE]; int output; } data_t; data_t training_data[] = { (data_t){{0, 0, neural_network_t::B}, 0}, (data_t){{1, 0, neural_network_t::B}, 1}, (data_t){{0, 1, neural_network_t::B}, 1}, (data_t){{1, 1, neural_network_t::B}, 0}, }; double sigmoid_derivative(int i) { return (double)i * ((double)1 - (double)i); } double sigmoid_activation(int i) { return (double)i / ((double)1 + exp(i)); } signed main() { neural_network_t my_neural_network; int training_sessions_counter; double sumerr = 0; for (training_sessions_counter = 0; training_sessions_counter < TRAINING_SESSIONS; training_sessions_counter++) { for (const auto &data : training_data) { int y[neural_network_t::INPUT_COUNT]; for (int h = 0; h < neural_network_t::INPUT_COUNT; h++) { //double r = std::accumulate(myList.begin(), // myList.end(), // 0, // [](int sum, int element) { // return sum + (element * 2); // } //); } } } printf("Number of steps: %d\n" "??: %lf\n", training_sessions_counter, sumerr ); return 0; }