Home | Develop | Download | Contact
Conv1DLayer.hpp
1 /*
2  * Conv1DLayer.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_CONV1DLAYER_HPP__
33 #define __PDS_CONV1DLAYER_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::Vector>> W;
72 
73  // Vector de bias
74  std::vector<double> Bias;
75 
76  // Matriz de bias
77  bool HasBias;
78 
79  // Funcion de activacion
80  double (*ActFunc)(double);
81  // Derivada de la funcion de activación
82  double (*DActFunc)(double);
83 
84  // Paso entre convoluciones
85  unsigned int Stride;
86 
87  // Padding de la convolucion, puede ser Pds::Ra::Valid, Pds::Ra::Full o Pds::Ra::Same.
88  Pds::Ra::Padding Padding;
89 
90 public:
91 
104  Conv1DLayer(void);
105 
121  Conv1DLayer(unsigned int Nin,
122  unsigned int Nout,
123  unsigned int Sz,
124  double(*func)(double)=Pds::ReLU,
125  double(*dfunc)(double)=Pds::DReLU,
126  unsigned int Stride=1,
127  Pds::Ra::Padding Padding=Pds::Ra::Valid );
128 
143  Conv1DLayer(const std::vector<std::vector<Pds::Vector>> &W,
144  double(*func)(double)=Pds::ReLU,
145  double(*dfunc)(double)=Pds::DReLU,
146  unsigned int Stride=1,
147  Pds::Ra::Padding Padding=Pds::Ra::Valid);
148 
149 
157 
158 
160 
165 public:
178  bool Rand(double minval,double maxval);
179 
180 
188  bool SetActFunc(double (*func)(double),double (*dfunc)(double));
189 
194 public:
205  bool IsEmpty(void) const;
206 
212  unsigned int Noutputs(void) const;
213 
219  unsigned int Ninputs(void) const;
220 
226  unsigned int KernelSize(void) const;
227 
233  Pds::Shape GetInputShape(void) const;
234 
235 
241  Pds::Shape GetOutputShape(const Pds::Shape &In) const;
242 
248 public:
309  bool ExportXmlToStream(std::ofstream &myfile) const;
310 
365  std::string ExportXmlToString(void) const;
366 
381  bool ImportXmlFromString(const std::string &str);
382 
387  bool SaveInStream(std::ofstream &myfile) const;
388 
389 
390 
405  bool LoadFromStream(std::ifstream &ifs);
410 public:
431  Pds::TensorBlock PredictTensor(const Pds::TensorBlock &In) const;
432 
448  std::vector<Pds::Vector> Predict(const std::vector<Pds::Vector> &Input) const;
449 
450 
456 public:
467  void Print(std::string str="") const;
468 
473  void PrintStylized(std::string str="") const;
474 
479  void MakeEmpty(void);
480 
487  {
488  return new Pds::Conv1DLayer(*this);
489  }
493 }; // Class Conv1DLayer
494 
495 } // namespace Pds
496 
497 
502 #endif
503 
La clase tipo Pds::AbstractLayer . Esta clase genera un objeto con dos parametros Nlin y Ncol....
La clase tipo Pds::Conv1DLayer . Esta clase genera un objeto con parametros. Para usar incluir <Pds/C...
Definition: Conv1DLayer.hpp:61
unsigned int Nout
Definition: Conv1DLayer.hpp:68
std::vector< double > Bias
Definition: Conv1DLayer.hpp:74
double(* DActFunc)(double)
Definition: Conv1DLayer.hpp:82
double(* ActFunc)(double)
Definition: Conv1DLayer.hpp:80
Pds::Ra::Padding Padding
Definition: Conv1DLayer.hpp:88
unsigned int Stride
Definition: Conv1DLayer.hpp:85
unsigned int Nin
Definition: Conv1DLayer.hpp:65
std::vector< std::vector< Pds::Vector > > W
Definition: Conv1DLayer.hpp:71
unsigned int Ninputs(void) const
Retorna el número de capas de entrada.
bool SetActFunc(double(*func)(double), double(*dfunc)(double))
Retorna true si la funcion de activacion fue modificada o false si no.
bool SaveInStream(std::ofstream &myfile) const
Salva los datos de la capa.
void MakeEmpty(void)
Limpia el objeto.
Pds::AbstractLayer * Clone(void)
Retorna un puntero (generado con new) a una nuevo dirección de memoria con una copia del objeto actua...
void PrintStylized(std::string str="") const
Muestra en pantalla el contenido de Pds::Conv1DLayer, en el formato (Nli,Ncol).
std::string ExportXmlToString(void) const
Salva los datos de la capa en un std::string en formato Xml.
Conv1DLayer(const std::vector< std::vector< Pds::Vector >> &W, double(*func)(double)=Pds::ReLU, double(*dfunc)(double)=Pds::DReLU, unsigned int Stride=1, Pds::Ra::Padding Padding=Pds::Ra::Valid)
Crea un objeto de tipo Pds::Conv1DLayer con W[0].size() entradas y W.size() salidas....
unsigned int Noutputs(void) const
Retorna el número de capas de salida.
Conv1DLayer(unsigned int Nin, unsigned int Nout, unsigned int Sz, double(*func)(double)=Pds::ReLU, double(*dfunc)(double)=Pds::DReLU, unsigned int Stride=1, Pds::Ra::Padding Padding=Pds::Ra::Valid)
Crea un objeto de tipo Pds::Conv1DLayer con Nin entradas y Nout salidas. Los pesos so iniciados con u...
std::vector< Pds::Vector > Predict(const std::vector< Pds::Vector > &Input) const
Evalua la capa de la Conv1D.
Conv1DLayer(void)
Crea un objeto de tipo Pds::Conv1DLayer nulo con 0 entradas y 0 salidas. Sin función de activación....
Pds::Shape GetOutputShape(const Pds::Shape &In) const
Retorna el Shape de salida de la estructura.
unsigned int KernelSize(void) const
Retorna el tamaño de cada kernel.
Conv1DLayer(const Pds::Conv1DLayer &B)
Crea un objeto de tipo Pds::Conv1DLayer copiando datos desde otro.
bool Rand(double minval, double maxval)
Carga los pesos con valores aleatorios uniformemente distribuidos desde minval hasta maxval.
bool ExportXmlToStream(std::ofstream &myfile) const
Salva los datos de la capa en un std::ofstream en formato Xml.
Pds::Shape GetInputShape(void) const
Retorna el Shape de entrada de la estructura, si no importa el elemento es -1.
bool IsEmpty(void) const
Retorna true si la capa esta vacia o false si no.
bool ImportXmlFromString(const std::string &str)
Carga los datos de la capa.
void Print(std::string str="") const
Muestra en pantalla el contenido de Pds::Conv1DLayer, elementos separados por tabulador.
bool LoadFromStream(std::ifstream &ifs)
Carga los datos de la capa.
Pds::TensorBlock PredictTensor(const Pds::TensorBlock &In) const
Evalua la capa de la Conv1D.
const std::string Conv1DLayer
Tag de un objeto de tipo Pds::Conv1DLayer.
Definition: NnDefines.hpp:139
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