SHOGUN  3.2.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
NeuralLayer.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014, Shogun Toolbox Foundation
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7 
8  * 1. Redistributions of source code must retain the above copyright notice,
9  * this list of conditions and the following disclaimer.
10  *
11  * 2. Redistributions in binary form must reproduce the above copyright notice,
12  * this list of conditions and the following disclaimer in the documentation
13  * and/or other materials provided with the distribution.
14  *
15  * 3. Neither the name of the copyright holder nor the names of its
16  * contributors may be used to endorse or promote products derived from this
17  * software without specific prior written permission.
18 
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
23  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29  * POSSIBILITY OF SUCH DAMAGE.
30  *
31  * Written (W) 2014 Khaled Nasr
32  */
33 
34 #ifndef __NEURALLAYER_H__
35 #define __NEURALLAYER_H__
36 
37 #include <shogun/lib/common.h>
38 #include <shogun/base/SGObject.h>
39 #include <shogun/lib/SGMatrix.h>
40 #include <shogun/lib/SGVector.h>
42 
43 namespace shogun
44 {
45 
50 {
57 };
58 
59 template <class T> class SGVector;
60 
87 class CNeuralLayer : public CSGObject
88 {
89 public:
91  CNeuralLayer();
92 
97  CNeuralLayer(int32_t num_neurons);
98 
99  virtual ~CNeuralLayer();
100 
109  virtual void initialize(CDynamicObjectArray* layers,
110  SGVector<int32_t> input_indices);
111 
119  virtual void set_batch_size(int32_t batch_size);
120 
127  virtual bool is_input() { return false; }
128 
144  SGVector<bool> parameter_regularizable,
145  float64_t sigma) { }
146 
153  virtual void compute_activations(SGMatrix<float64_t> inputs) { }
154 
164  virtual void compute_activations(SGVector<float64_t> parameters,
165  CDynamicObjectArray* layers) { }
166 
195  virtual void compute_gradients(SGVector<float64_t> parameters,
196  SGMatrix<float64_t> targets,
197  CDynamicObjectArray* layers,
198  SGVector<float64_t> parameter_gradients) { }
199 
206  virtual float64_t compute_error(SGMatrix<float64_t> targets) { return 0; }
207 
216  virtual void enforce_max_norm(SGVector<float64_t> parameters,
217  float64_t max_norm) { }
218 
227  virtual void dropout_activations();
228 
243  {
244  return 0.0;
245  }
246 
251  virtual int32_t get_num_neurons() { return m_num_neurons; }
252 
258  virtual int32_t get_width() { return m_width; }
259 
265  virtual int32_t get_height() { return m_height; }
266 
271  virtual int32_t get_num_parameters() { return m_num_parameters; }
272 
278 
285  {
286  return m_activation_gradients;
287  }
288 
295  {
296  return m_local_gradients;
297  }
298 
299  virtual const char* get_name() const { return "NeuralLayer"; }
300 
301 private:
302  void init();
303 
304 public:
309 
312 
323 
328 
329 protected:
331  int32_t m_num_neurons;
332 
336  int32_t m_width;
337 
341  int32_t m_height;
342 
345 
348 
353 
355  int32_t m_batch_size;
356 
361 
366 
372 
378 };
379 
380 }
381 #endif

SHOGUN Machine Learning Toolbox - Documentation