Home | Develop | Download | Contact
example_optadam_create.cpp
1
38#include <cmath>
39#include <Pds/Ra>
40#include <cfloat>
41
42int main(void)
43{
45 //Pds::Ra::Randomize();
46 unsigned int L=1000;
47
48 Pds::Line2D Line(Pds::Ra::Pi/4,sqrt(2)/2);
49 Line.Print("Line: ");
50
52 Pds::Vector Y=Line.EvalSamples(X).Geq(0.0);
53 Pds::Vector Yhat=Y;
54
55 Pds::Octave::Plot::PointsX2DY(X,Y,"testando.m","example_optadam_create_dataset.png");
56
59 Pds::Vector W(3); W.FillRandN();
60 Pds::Vector DW;
62 unsigned int iter=0;
63 double alpha=0.1;
64 double lambda=0.01;
65 Pds::OptAdam Opt(W.Size());
66 Opt.Print("Adam:\t");
67
68 std::cout<<std::endl;
69
71 do
72 {
73 Yhat=Pds::Sigmoid(R*W);
74 g=(1.0/L)*R.TMul(Yhat-Y)+(lambda/3)*W;
75 Opt.OptimizeGradient(g);
76
77 W=W-alpha*g;
78
79 iter++;
80
81 }while(Yhat.MSE(Y)>1.0e-1);
83
84 std::cout<<"iter:\t"<<iter<<"\n";
85 W.T().Print("W.T():\t");
86 std::cout<<"Acc:\t"<<Pds::Accuracy(Pds::Sigmoid(R*W),Y)<<"\n";
87 std::cout<<"MSE:\t"<<Yhat.MSE(Y)<<"\n";
88
89 Pds::Octave::Plot::PointsX2DYW(X,Y,W,"testando.m","example_optadam_create_result_opt.png");
90
91 std::cout<<std::endl;
93 W.FillRandN();
94 iter=0;
96 do
97 {
98 Yhat=Pds::Sigmoid(R*W);
99 g=(1.0/L)*R.TMul(Yhat-Y)+(lambda/3)*W;
100
101 W=W-alpha*g;
102
103 iter++;
104 }while(Yhat.MSE(Y)>1.0e-1);
105 Pds::Ra::Toc();
106
107 std::cout<<"iter:\t"<<iter<<"\n";
108 W.T().Print("W.T():\t");
109 std::cout<<"Acc:\t"<<Pds::Accuracy(Pds::Sigmoid(R*W),Y)<<"\n";
110 std::cout<<"MSE:\t"<<Yhat.MSE(Y)<<"\n";
111
112 Pds::Octave::Plot::PointsX2DYW(X,Y,W,"testando.m","example_optadam_create_result.png");
113
114}
La clase tipo Pds::Line2D . Esta clase genera un objeto con dos parámetros theta y rho....
Definition: Line2D.hpp:56
La clase tipo Pds::Matrix . Esta clase genera una matriz de Nlin lineas y Ncol columnas....
Definition: Matrix.hpp:96
La clase tipo Pds::OptAdam . Esta clase genera un objeto con dos parametros Nlin y Ncol....
Definition: OptAdam.hpp:60
La clase tipo Pds::Vector . Esta clase genera una matriz de Nlin lineas y 1 columna....
Definition: Vector.hpp:80
const double Pi
Número PI.
Definition: RaDefines.hpp:189
Pds::Matrix RegressorMatrix(const std::initializer_list< Pds::Matrix > list)
Retorna una Regressor Matrix , creado concatenando verticalmente las matrices en una lista ....
Pds::Matrix RandU(unsigned int N)
Crea una matriz con datos aleatórios uniformemente distribuidos entre 0.0 y 1.0.
double Accuracy(const Pds::Matrix &A, const Pds::Matrix &B, double Umbral=0.5)
Calcula el valor de la Accuracy entre los elementos de las matrices A y B. A>Umbral,...
Pds::Matrix Sigmoid(const Pds::Matrix &X)
Retorna el resultado de evaluar elemento a elemento la función sigmoid.
Pds::Matrix TMul(const Pds::Matrix &B) const
Multiplica con la transpuesta de sí mismo (A^T), la matriz B y el resultado es cargado en C....
double MSE(const Pds::Matrix &B) const
Calcula valor del error quadrático medio (Mean Square Error) entre las matrices y .
Pds::Matrix Geq(double b) const
[Elemento a elemento] Calcula con sigo mismo (A), si (A) es mayor o igual que un valor b y el resulta...
bool PointsX2DYW(const Pds::Matrix &X, const Pds::Vector &Y, const Pds::Vector &W, const std::string &octfilename, const std::string &imgfilename)
Plot de muestras en 2D en las columnas X, clasificadas de forma binaria con Y>=0.5,...
bool DAspect
Habilita o deshabilita daspect([1 1 1]) en el código octave. Por defecto:
bool PointsX2DY(const Pds::Matrix &X, const Pds::Vector &Y, const std::string &octfilename, const std::string &imgfilename)
Plot de muestras en 2D en las columnas X, clasificadas de forma binaria con Y>=0.5,...
double Toc(void)
Retorna e imprime en pantalla el tiempo transcurrido desde Pds::Ra::Tic()
clock_t Tic(void)
Retorna el número de clocks actual. Este valor tambien es salvado internamente.

Enlaces de interés

HomePage Bazaar Download Bug report Ayuda Developer Feed