mlpack
brnn.hpp
Go to the documentation of this file.
1 
13 #ifndef MLPACK_METHODS_ANN_BRNN_HPP
14 #define MLPACK_METHODS_ANN_BRNN_HPP
15 
16 #include <mlpack/prereqs.hpp>
17 
20 #include "visitor/copy_visitor.hpp"
23 
29 
30 #include <ensmallen.hpp>
31 
32 namespace mlpack {
33 namespace ann {
34 
41 template<
42  typename OutputLayerType = NegativeLogLikelihood<>,
43  typename MergeLayerType = Concat<>,
44  typename MergeOutputType = LogSoftMax<>,
45  typename InitializationRuleType = RandomInitialization,
46  typename... CustomLayers
47 >
48 class BRNN
49 {
50  public:
52  using NetworkType = BRNN<OutputLayerType,
53  MergeLayerType,
54  MergeOutputType,
55  InitializationRuleType,
56  CustomLayers...>;
57 
75  BRNN(const size_t rho,
76  const bool single = false,
77  OutputLayerType outputLayer = OutputLayerType(),
78  MergeLayerType* mergeLayer = new MergeLayerType(),
79  MergeOutputType* mergeOutput = new MergeOutputType(),
80  InitializationRuleType initializeRule = InitializationRuleType());
81 
82  ~BRNN();
83 
93  template<typename OptimizerType>
94  typename std::enable_if<
95  HasMaxIterations<OptimizerType, size_t&(OptimizerType::*)()>
96  ::value, void>::type
97  WarnMessageMaxIterations(OptimizerType& optimizer, size_t samples) const;
98 
107  template<typename OptimizerType>
108  typename std::enable_if<
109  !HasMaxIterations<OptimizerType, size_t&(OptimizerType::*)()>
110  ::value, void>::type
111  WarnMessageMaxIterations(OptimizerType& optimizer, size_t samples) const;
112 
136  template<typename OptimizerType>
137  double Train(arma::cube predictors,
138  arma::cube responses,
139  OptimizerType& optimizer);
140 
164  template<typename OptimizerType = ens::StandardSGD>
165  double Train(arma::cube predictors, arma::cube responses);
166 
186  void Predict(arma::cube predictors,
187  arma::cube& results,
188  const size_t batchSize = 256);
189 
203  double Evaluate(const arma::mat& parameters,
204  const size_t begin,
205  const size_t batchSize,
206  const bool deterministic);
207 
220  double Evaluate(const arma::mat& parameters,
221  const size_t begin,
222  const size_t batchSize);
223 
237  template<typename GradType>
238  double EvaluateWithGradient(const arma::mat& parameters,
239  const size_t begin,
240  GradType& gradient,
241  const size_t batchSize);
242 
256  void Gradient(const arma::mat& parameters,
257  const size_t begin,
258  arma::mat& gradient,
259  const size_t batchSize);
260 
265  void Shuffle();
266 
267  /*
268  * Add a new module to the model.
269  *
270  * @param args The layer parameter.
271  */
272  template <class LayerType, class... Args>
273  void Add(Args... args);
274 
275  /*
276  * Add a new module to the model.
277  *
278  * @param layer The Layer to be added to the model.
279  */
280  void Add(LayerTypes<CustomLayers...> layer);
281 
283  size_t NumFunctions() const { return numFunctions; }
284 
286  const arma::mat& Parameters() const { return parameter; }
288  arma::mat& Parameters() { return parameter; }
289 
291  const size_t& Rho() const { return rho; }
293  size_t& Rho() { return rho; }
294 
296  const arma::cube& Responses() const { return responses; }
298  arma::cube& Responses() { return responses; }
299 
301  const arma::cube& Predictors() const { return predictors; }
303  arma::cube& Predictors() { return predictors; }
304 
310  void Reset();
311 
315  void ResetParameters();
316 
318  template<typename Archive>
319  void serialize(Archive& ar, const uint32_t /* version */);
320 
321  private:
322  // Helper functions.
327  void ResetDeterministic();
328 
330  size_t rho;
331 
333  OutputLayerType outputLayer;
334 
336  LayerTypes<CustomLayers...> mergeLayer;
337 
339  LayerTypes<CustomLayers...> mergeOutput;
340 
343  InitializationRuleType initializeRule;
344 
346  size_t inputSize;
347 
349  size_t outputSize;
350 
352  size_t targetSize;
353 
355  bool reset;
356 
358  bool single;
359 
361  arma::cube predictors;
362 
364  arma::cube responses;
365 
367  arma::mat parameter;
368 
370  size_t numFunctions;
371 
373  arma::mat error;
374 
376  DeltaVisitor deltaVisitor;
377 
379  OutputParameterVisitor outputParameterVisitor;
380 
382  std::vector<arma::mat> forwardRNNOutputParameter;
383 
385  std::vector<arma::mat> backwardRNNOutputParameter;
386 
388  WeightSizeVisitor weightSizeVisitor;
389 
391  ResetVisitor resetVisitor;
392 
394  DeleteVisitor deleteVisitor;
395 
397  CopyVisitor<CustomLayers...> copyVisitor;
398 
400  bool deterministic;
401 
403  arma::mat forwardGradient;
404 
406  arma::mat backwardGradient;
407 
409  arma::mat totalGradient;
410 
412  RNN<OutputLayerType, InitializationRuleType, CustomLayers...> forwardRNN;
413 
415  RNN<OutputLayerType, InitializationRuleType, CustomLayers...> backwardRNN;
416 }; // class BRNN
417 
418 } // namespace ann
419 } // namespace mlpack
420 
421 // Include implementation.
422 #include "brnn_impl.hpp"
423 
424 #endif
void serialize(Archive &ar, const uint32_t)
Serialize the model.
Definition: brnn_impl.hpp:721
DeleteVisitor executes the destructor of the instantiated object.
Definition: delete_visitor.hpp:27
Implementation of the Add module class.
Definition: add.hpp:34
arma::mat & Parameters()
Modify the initial point for the optimization.
Definition: brnn.hpp:288
std::enable_if< HasMaxIterations< OptimizerType, size_t &(OptimizerType::*)()>::value, void >::type WarnMessageMaxIterations(OptimizerType &optimizer, size_t samples) const
Check if the optimizer has MaxIterations() parameter, if it does then check if it&#39;s value is less tha...
Definition: brnn_impl.hpp:87
double Train(arma::cube predictors, arma::cube responses, OptimizerType &optimizer)
Train the bidirectional recurrent neural network on the given input data using the given optimizer...
Definition: brnn_impl.hpp:121
size_t NumFunctions() const
Return the number of separable functions. (number of predictor points).
Definition: brnn.hpp:283
Linear algebra utility functions, generally performed on matrices or vectors.
Definition: cv.hpp:1
This visitor is to support copy constructor for neural network module.
Definition: copy_visitor.hpp:26
The core includes that mlpack expects; standard C++ includes and Armadillo.
WeightSizeVisitor returns the number of weights of the given module.
Definition: weight_size_visitor.hpp:27
size_t & Rho()
Modify the maximum length of backpropagation through time.
Definition: brnn.hpp:293
const arma::cube & Responses() const
Get the matrix of responses to the input data points.
Definition: brnn.hpp:296
const size_t & Rho() const
Return the maximum length of backpropagation through time.
Definition: brnn.hpp:291
Implementation of a standard recurrent neural network container.
Definition: rnn.hpp:45
void Gradient(const arma::mat &parameters, const size_t begin, arma::mat &gradient, const size_t batchSize)
Evaluate the gradient of the bidirectional recurrent neural network with the given parameters...
Definition: brnn_impl.hpp:600
void Reset()
Reset the state of the network.
Definition: brnn_impl.hpp:693
BRNN(const size_t rho, const bool single=false, OutputLayerType outputLayer=OutputLayerType(), MergeLayerType *mergeLayer=new MergeLayerType(), MergeOutputType *mergeOutput=new MergeOutputType(), InitializationRuleType initializeRule=InitializationRuleType())
Create the BRNN object.
Definition: brnn_impl.hpp:36
arma::cube & Predictors()
Modify the matrix of data points (predictors).
Definition: brnn.hpp:303
arma::cube & Responses()
Modify the matrix of responses to the input data points.
Definition: brnn.hpp:298
ResetVisitor executes the Reset() function.
Definition: reset_visitor.hpp:26
OutputParameterVisitor exposes the output parameter of the given module.
Definition: output_parameter_visitor.hpp:27
const arma::cube & Predictors() const
Get the matrix of data points (predictors).
Definition: brnn.hpp:301
void Shuffle()
Shuffle the order of function visitation.
Definition: brnn_impl.hpp:613
void ResetParameters()
Reset the module information (weights/parameters).
Definition: brnn_impl.hpp:648
Implementation of a standard bidirectional recurrent neural network container.
Definition: brnn.hpp:48
double Evaluate(const arma::mat &parameters, const size_t begin, const size_t batchSize, const bool deterministic)
Evaluate the bidirectional recurrent neural network with the given parameters.
Definition: brnn_impl.hpp:266
double EvaluateWithGradient(const arma::mat &parameters, const size_t begin, GradType &gradient, const size_t batchSize)
Evaluate the bidirectional recurrent neural network with the given parameters.
Definition: brnn_impl.hpp:369
void Predict(arma::cube predictors, arma::cube &results, const size_t batchSize=256)
Predict the responses to a given set of predictors.
Definition: brnn_impl.hpp:189
DeltaVisitor exposes the delta parameter of the given module.
Definition: delta_visitor.hpp:27
const arma::mat & Parameters() const
Return the initial point for the optimization.
Definition: brnn.hpp:286