diff --git a/main.cpp b/main.cpp index e3379b4..81ce36a 100644 --- a/main.cpp +++ b/main.cpp @@ -1,9 +1,54 @@ #include "robbie.hpp" #include +#include +#include + +template +Robbie::Vector function( const Robbie::Vector & x ) +{ + return x.array().pow( 2 ); +} + +template +void generate_training_data( + int n_samples, int input_size, std::vector> & x_train, + std::vector> & y_train ) +{ + std::mt19937 gen = std::mt19937( 0 ); + std::uniform_real_distribution dist = std::uniform_real_distribution( -10.0, 10.0 ); + + for( int i = 0; i < n_samples; i++ ) + { + const auto random_lambda = [&]( scalar x ) { return dist( gen ); }; + Robbie::Vector x_cur = Robbie::Vector::Zero( input_size ).array().unaryExpr( random_lambda ); + x_train.push_back( x_cur ); + y_train.push_back( function( x_cur ) ); + } +} int main() { - fmt::print( "Hello!" ); + using namespace Robbie; + std::vector> x_train( 0 ); + std::vector> y_train( 0 ); + std::vector> x_test( 0 ); + std::vector> y_test( 0 ); + + int n_train = 20; + int n_test = n_train * 0.2; + int input_size = 10; + + generate_training_data( n_train, input_size, x_train, y_train ); + generate_training_data( n_test, input_size, x_test, y_test ); + + fmt::print( "x_train[10] = {}\n", fmt::streamed( x_train[10] ) ); + fmt::print( "y_train[10] = {}\n", fmt::streamed( y_train[10] ) ); + + auto network = Network>(); + network.add( FCLayer( input_size, 100 ) ); + network.add( ActivationLayer>() ); + network.add( FCLayer( 100, 10 ) ); + network.summary(); - // Robbie::do_stuff(); + network.fit( x_train, y_train, 25, 0.001 / 2.0, true ); } \ No newline at end of file