#include "network.hpp" Network::Network(){ C=Quadratic; } void Network::push_layer(Layer::Layer& l){ if(layers.empty()){ n_in=l.get_input_size(); layers.push_back(&l); cout<<"In size = "<get_output_size()); layers.push_back(&l); } n_out=l.get_output_size(); } void Network::is_done(){ last_delta=init_vector(n_out); } Vector Network::feed_forward(Vector x_in){ Vector x=x_in; for(auto it=layers.begin();it!=layers.end();++it){ //cout<<" - Try feed_forward on layer "<<(*it)->name<feed_forward(x); } a=x; return a; } Real Network::eval(Dataset* dataset){ size_t n=dataset->get_test_size(); size_t nb=0; for(size_t i=0;i t=dataset->get_test(i); Vector a=feed_forward(t.first); if(argmax(a,n_out)==argmax(t.second,n_out)) ++nb; } Real res=Real(nb)/Real(n)*100; cout<<"> Res = "< distribution(0,size-1); for(size_t k=0;kget_train_size(); size_t nb_batchs=(train_size-1)/batch_size+1; size_t* indices=new size_t[train_size]; for(size_t i=0;iinit_nabla(); } for(size_t i=begin;i data=dataset->get_train(indices[i]); //cout<<"Call back_propagation on batch data "<update(eta_batch); } } void Network::back_propagation(Vector x,Vector y,Real eta){ Vector z=feed_forward(x); //cout<<" - Feed forward done"<name<back_propagation(delta); //cout<<" - Done"<