/**************************************************************** **** **** This file belongs with the course **** Introduction to Scientific Programming in C++/Fortran2003 **** copyright 2020-2023 Victor Eijkhout eijkhout@tacc.utexas.edu **** **** mllib.cpp : neural net library **** ****************************************************************/ #include "ml.hpp" #include using std::cout; #include using std::stringstream; #include using std::string; #include using std::vector; #include #include /* * One data vector */ data_vector::data_vector(int n,float init) : coefficients( vector(n,init) ) { }; data_vector::data_vector( vector coefficients ) : coefficients(coefficients) { }; int data_vector::size() const { return coefficients.size(); }; float data_vector::at(int i) const { return coefficients.at(i); }; float& data_vector::at(int i) { return coefficients.at(i); }; void data_vector::limit() { // maybe for future use for ( auto &e : coefficients ) e = .00; }; void data_vector::copy_from( const data_vector &other ) { assert( size()==other.size() ); for (int i=0; i(m*n,init) ),m(m),n(n) { }; void matrix::mult(const data_vector &in,data_vector &out) { assert( in.size()==n ); assert( out.size()==m ); for (int i=0; i datasizes ) { for ( int level=0; level=0; d--) { if (d==depth()-1) layers.at(d).topdelta(reference,trace); else { // for (int l=d-2; l>=0; l--) { // deltas.at(l).recursive_delta( deltas.at(l+1),intermediates.at(l) ); cout << "Can not handle multiple layers right now" << '\n'; throw(1); } if (trace) cout << "delta" << d << ": " << layers.at(d).deltavector().as_string() << '\n'; layers.at(d).update(); } }; /* * Auxiliary functions */ void diff( const data_vector &in1,const data_vector &in2, data_vector &out ) { assert(in1.size()==in2.size()); assert(in2.size()==out.size()); for (int i=0; i