Home | Develop | Download | Contact
example_optadam_create.cpp

Programa para el testeo de las funciones.

Programa para el testeo de las funciones.Para compilar o código example_optadam_create.cpp:

g++ -static -o example_optadam_create example_optadam_create.cpp -lpdsramm

Para executar o programa:

./example_optadam_create

Retornando por consola:

Line: 0.785398  0.707107
Adam:   0.9     0.999   1e-08

Elapsed time: 20.625 ms
iter:   43
W.T():   -2.9813244828039  3.1932510593674  2.8884808399316
Acc:    0.974
MSE:    0.099369971739295

Elapsed time: 326.766 ms
iter:   1067
W.T():   -2.8835706458582  3.1840863311315  2.7959474595739
Acc:    0.962
MSE:    0.099981985509445

example_optadam_create_dataset.png


example_optadam_create_result_opt.png


example_optadam_create_result.png

Código example_optadam_create.cpp:

#include <cmath>
#include <Pds/Ra>
#include <cfloat>
int main(void)
{
//Pds::Ra::Randomize();
unsigned int L=1000;
Pds::Line2D Line(Pds::Ra::Pi/4,sqrt(2)/2);
Line.Print("Line: ");
Pds::Vector Y=Line.EvalSamples(X).Geq(0.0);
Pds::Vector Yhat=Y;
Pds::Octave::Plot::PointsX2DY(X,Y,"testando.m","example_optadam_create_dataset.png");
unsigned int iter=0;
double alpha=0.1;
double lambda=0.01;
Pds::OptAdam Opt(W.Size());
Opt.Print("Adam:\t");
std::cout<<std::endl;
do
{
Yhat=Pds::Sigmoid(R*W);
g=(1.0/L)*R.TMul(Yhat-Y)+(lambda/3)*W;
W=W-alpha*g;
iter++;
}while(Yhat.MSE(Y)>1.0e-1);
std::cout<<"iter:\t"<<iter<<"\n";
W.T().Print("W.T():\t");
std::cout<<"Acc:\t"<<Pds::Accuracy(Pds::Sigmoid(R*W),Y)<<"\n";
std::cout<<"MSE:\t"<<Yhat.MSE(Y)<<"\n";
Pds::Octave::Plot::PointsX2DYW(X,Y,W,"testando.m","example_optadam_create_result_opt.png");
std::cout<<std::endl;
W.FillRandN();
iter=0;
do
{
Yhat=Pds::Sigmoid(R*W);
g=(1.0/L)*R.TMul(Yhat-Y)+(lambda/3)*W;
W=W-alpha*g;
iter++;
}while(Yhat.MSE(Y)>1.0e-1);
std::cout<<"iter:\t"<<iter<<"\n";
W.T().Print("W.T():\t");
std::cout<<"Acc:\t"<<Pds::Accuracy(Pds::Sigmoid(R*W),Y)<<"\n";
std::cout<<"MSE:\t"<<Yhat.MSE(Y)<<"\n";
Pds::Octave::Plot::PointsX2DYW(X,Y,W,"testando.m","example_optadam_create_result.png");
}
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.
Pds::Vector EvalSamples(const Pds::Matrix &X) const
Evalua cada linea de la matrix en la ecuación .
void Print(std::string str="") const
Muestra en pantalla el contenido de Pds::Line2D, elementos separados por tabulador.
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....
Pds::Matrix T(void) const
Transpuesta de si mismo (A), el resultado es cargado en B.
double MSE(const Pds::Matrix &B) const
Calcula valor del error quadrático medio (Mean Square Error) entre las matrices y .
bool FillRandN(void)
Inicializa la matriz con números aleatórios, distribuidos usando una distribución Gaussiana normaliza...
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...
Pds::Size Size(void) const
Retorna un objeto de tipo Pds::Size con el número de lineas y columans.
void Print(const std::string &str, unsigned int precision) const
Imprime en pantalla el contenido de la matriz después del texto indicado en str.
void Print(std::string str="") const
Muestra en pantalla el contenido de Pds::OptAdam, elementos separados por tabulador.
bool OptimizeGradient(Pds::Matrix &g)
Calcula el gradiente optimizado .
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