Home | Develop | Download | Contact
Conv2DLayer.hpp
1 /*
2  * Conv2DLayer.hpp
3  *
4  * Copyright 2018 Fernando Pujaico Rivera <fernando.pujaico.rivera@gmail.com>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19  * MA 02110-1301, USA.
20  *
21  */
22 
32 #ifndef __PDS_CONV2DLAYER_HPP__
33 #define __PDS_CONV2DLAYER_HPP__
34 
35 #include <string>
36 #include <vector>
37 #include <Pds/Ra>
38 #include <Pds/AbstractLayer>
39 
49 namespace Pds{
50 
51 
61 {
62 
63 private:
64  // Número de canales de entrada, W[n].size().
65  unsigned int Nin;
66 
67  // Número de capas de salida, W.size().
68  unsigned int Nout;
69 
70  // Matriz de pesos
71  std::vector<std::vector<Pds::Matrix>> W;
72 
73  // Funcion de activacion
74  double (*ActFunc)(double);
75  // Derivada de la funcion de activación
76  double (*DActFunc)(double);
77 
78  // Paso entre convoluciones
79  std::vector<unsigned int> Strides;
80 
81  // Padding de la convolucion, puede ser Pds::Ra::Valid, Pds::Ra::Full o Pds::Ra::Same.
82  Pds::Ra::Padding Padding;
83 
84 public:
85 
98  Conv2DLayer(void);
99 
115  Conv2DLayer(unsigned int Nin,
116  unsigned int Nout,
117  const Pds::Size &Sz,
118  double(*func)(double)=Pds::ReLU,
119  double(*dfunc)(double)=Pds::DReLU,
120  const std::vector<unsigned int> &Strides={1, 1},
121  Pds::Ra::Padding Padding=Pds::Ra::Valid );
122 
137  Conv2DLayer(const std::vector<std::vector<Pds::Matrix>> &W,
138  double(*func)(double)=Pds::ReLU,
139  double(*dfunc)(double)=Pds::DReLU,
140  const std::vector<unsigned int> &Strides={1, 1},
141  Pds::Ra::Padding Padding=Pds::Ra::Valid);
142 
143 
151 
152 
154 
159 public:
172  bool Rand(double minval,double maxval);
173 
174 
182  bool SetActFunc(double (*func)(double),double (*dfunc)(double));
183 
188 public:
199  bool IsEmpty(void) const;
200 
206  unsigned int Noutputs(void) const;
207 
213  unsigned int Ninputs(void) const;
214 
220  Pds::Size KernelSize(void) const;
221 
227  Pds::Shape GetInputShape(void) const;
228 
229 
235  Pds::Shape GetOutputShape(const Pds::Shape &In) const;
236 
242 public:
304  bool ExportXmlToStream(std::ofstream &myfile) const;
305 
361  std::string ExportXmlToString(void) const;
362 
377  bool ImportXmlFromString(const std::string &str);
378 
383  bool SaveInStream(std::ofstream &myfile) const;
384 
385 
386 
401  bool LoadFromStream(std::ifstream &ifs);
406 public:
427  Pds::TensorBlock PredictTensor(const Pds::TensorBlock &In) const;
428 
444  std::vector<Pds::Matrix> Predict(const std::vector<Pds::Matrix> &Input) const;
445 
446 
452 public:
463  void Print(std::string str="") const;
464 
469  void PrintStylized(std::string str="") const;
470 
475  void MakeEmpty(void);
476 
483  {
484  return new Pds::Conv2DLayer(*this);
485  }
489 }; // Class Conv2DLayer
490 
491 } // namespace Pds
492 
493 
498 #endif
499 
La clase tipo Pds::AbstractLayer . Esta clase genera un objeto con dos parametros Nlin y Ncol....
La clase tipo Pds::Conv2DLayer . Esta clase genera un objeto con parametros. Para usar incluir <Pds/C...
Definition: Conv2DLayer.hpp:61
Pds::Ra::Padding Padding
Definition: Conv2DLayer.hpp:82
unsigned int Nin
Definition: Conv2DLayer.hpp:65
std::vector< unsigned int > Strides
Definition: Conv2DLayer.hpp:79
double(* ActFunc)(double)
Definition: Conv2DLayer.hpp:74
unsigned int Nout
Definition: Conv2DLayer.hpp:68
std::vector< std::vector< Pds::Matrix > > W
Definition: Conv2DLayer.hpp:71
double(* DActFunc)(double)
Definition: Conv2DLayer.hpp:76
void PrintStylized(std::string str="") const
Muestra en pantalla el contenido de Pds::Conv2DLayer, en el formato (Nli,Ncol).
Conv2DLayer(unsigned int Nin, unsigned int Nout, const Pds::Size &Sz, double(*func)(double)=Pds::ReLU, double(*dfunc)(double)=Pds::DReLU, const std::vector< unsigned int > &Strides={1, 1}, Pds::Ra::Padding Padding=Pds::Ra::Valid)
Crea un objeto de tipo Pds::Conv2DLayer con Nin entradas y Nout salidas. Los pesos so iniciados con u...
Conv2DLayer(void)
Crea un objeto de tipo Pds::Conv2DLayer nulo con 0 entradas y 0 salidas. Sin función de activación....
Pds::Size KernelSize(void) const
Retorna el tamaño de cada kernel.
Pds::TensorBlock PredictTensor(const Pds::TensorBlock &In) const
Evalua la capa de la Conv2D.
bool ExportXmlToStream(std::ofstream &myfile) const
Salva los datos de la capa en un std::ofstream en formato Xml.
bool SaveInStream(std::ofstream &myfile) const
Salva los datos de la capa.
unsigned int Noutputs(void) const
Retorna el número de capas de salida.
bool SetActFunc(double(*func)(double), double(*dfunc)(double))
Retorna true si la funcion de activacion fue modificada o false si no.
void Print(std::string str="") const
Muestra en pantalla el contenido de Pds::Conv2DLayer, elementos separados por tabulador.
Conv2DLayer(const Pds::Conv2DLayer &B)
Crea un objeto de tipo Pds::Conv2DLayer copiando datos desde otro.
unsigned int Ninputs(void) const
Retorna el número de capas de entrada.
bool Rand(double minval, double maxval)
Carga los pesos con valores aleatorios uniformemente distribuidos desde minval hasta maxval.
bool IsEmpty(void) const
Retorna true si la capa esta vacia o false si no.
std::vector< Pds::Matrix > Predict(const std::vector< Pds::Matrix > &Input) const
Evalua la capa de la Conv2D.
void MakeEmpty(void)
Limpia el objeto.
bool ImportXmlFromString(const std::string &str)
Carga los datos de la capa.
Pds::Shape GetOutputShape(const Pds::Shape &In) const
Retorna el Shape de salida de la estructura.
Pds::Shape GetInputShape(void) const
Retorna el Shape de entrada de la estructura, si no importa el elemento es -1.
std::string ExportXmlToString(void) const
Salva los datos de la capa en un std::string en formato Xml.
Conv2DLayer(const std::vector< std::vector< Pds::Matrix >> &W, double(*func)(double)=Pds::ReLU, double(*dfunc)(double)=Pds::DReLU, const std::vector< unsigned int > &Strides={1, 1}, Pds::Ra::Padding Padding=Pds::Ra::Valid)
Crea un objeto de tipo Pds::Conv2DLayer con W[0].size() entradas y W.size() salidas....
Pds::AbstractLayer * Clone(void)
Retorna un puntero (generado con new) a una nuevo dirección de memoria con una copia del objeto actua...
bool LoadFromStream(std::ifstream &ifs)
Carga los datos de la capa.
const std::string Conv2DLayer
Tag de un objeto de tipo Pds::Conv2DLayer.
Definition: NnDefines.hpp:144
Nombre de espacion para PDS (Procesamiento Digital de Senales)
Definition: FCLayer.hpp:48

Enlaces de interés

HomePage Bazaar Download Bug report Ayuda Developer Feed