18 #ifndef INCLUDEDNEURALNETWORKH
19 #define INCLUDEDNEURALNETWORKH
28 #include <boost/numeric/ublas/matrix.hpp>
29 #include <boost/numeric/ublas/matrix_proxy.hpp>
30 #include <boost/numeric/ublas/io.hpp>
34 #include <boost/archive/text_oarchive.hpp>
35 #include <boost/archive/text_iarchive.hpp>
36 #include <boost/serialization/vector.hpp>
42 using namespace boost::numeric;
44 double sigmoid(
double x);
58 void reset(std::vector<int> geometry);
61 bool fromFile(std::string file);
64 bool toFile(std::string file);
67 double train(
Corpus &c,
double rate,
double regularization,
int nbIter,
bool debug =
false);
70 double classify(std::vector<double> input);
73 double accuracy(
Corpus &c);
81 unsigned int nbLayers() {
return mLayers.size(); }
84 unsigned int dimension();
87 std::vector< ublas::matrix<double> > mLayers;
89 double gradientDescent(ublas::matrix<double> &ds, ublas::vector<double> &tv,
double rate,
unsigned int steps);
92 ublas::matrix<double> classify(ublas::matrix<double> input);
95 std::vector< ublas::matrix<double> > gradient(ublas::matrix<double> &ds, ublas::vector<double> &tv,
double regularization = 0);
98 std::vector< ublas::matrix<double> > gradientChecking(ublas::matrix<double> &ds, ublas::vector<double> &tv,
double regularization = 0,
double epsilon = 0.0001);
101 double costFunction(ublas::matrix<double> &ds, ublas::vector<double> &tv,
double regularization = 0);
106 static ublas::matrix<double> createDataset(
Corpus &c);
109 static ublas::vector<double> createTargetVector(
Corpus &c);
114 static ublas::vector<double> addOne(ublas::vector<double> v);
117 static ublas::matrix<double> addOne(ublas::matrix<double> v);
120 static ublas::matrix_range<ublas::matrix<double> > removeOnes(ublas::matrix<double> m);
123 static ublas::matrix_range<ublas::matrix<double> > jthCol(ublas::matrix<double> m,
size_t j);
126 static ublas::vector<double> elementWise(ublas::vector<double> v,
double (*f)(
double));
129 static ublas::matrix<double> elementWise(ublas::matrix<double> v,
double (*f)(
double));
132 static ublas::matrix<double> vecToMat(ublas::vector<double> v);
135 static ublas::vector<double> unroll(ublas::matrix<double> m);
138 static ublas::matrix<double> roll(ublas::vector<double> m,
unsigned int r,
unsigned int c);
141 friend class boost::serialization::access;
142 template<
class Archive>
143 void serialize(Archive & ar,
const unsigned int version);