C++ API Reference for Intel® Data Analytics Acceleration Library 2019 Update 4

neural_networks_learnable_parameters.h
1 /* file: neural_networks_learnable_parameters.h */
2 /*******************************************************************************
3 * Copyright 2014-2019 Intel Corporation.
4 *
5 * This software and the related documents are Intel copyrighted materials, and
6 * your use of them is governed by the express license under which they were
7 * provided to you (License). Unless the License provides otherwise, you may not
8 * use, modify, copy, publish, distribute, disclose or transmit this software or
9 * the related documents without Intel's prior written permission.
10 *
11 * This software and the related documents are provided as is, with no express
12 * or implied warranties, other than those that are expressly stated in the
13 * License.
14 *******************************************************************************/
15 
16 /*
17 //++
18 // Implementation of neural network model.
19 //--
20 */
21 
22 #ifndef __NEURAL_NETWORKS_LEARNABLE_PARAMETERS_H__
23 #define __NEURAL_NETWORKS_LEARNABLE_PARAMETERS_H__
24 
25 #include "algorithms/algorithm.h"
26 #include "algorithms/neural_networks/neural_networks_types.h"
27 
28 #include "data_management/data/homogen_numeric_table.h"
29 #include "data_management/data/homogen_tensor.h"
30 
31 namespace daal
32 {
33 namespace algorithms
34 {
35 namespace neural_networks
36 {
37 namespace interface1
38 {
47 class LearnableParametersIface : public data_management::SerializationIface
48 {
49 public:
50  virtual ~LearnableParametersIface() {}
51 
52  virtual data_management::NumericTablePtr copyToTable() const = 0;
53  virtual data_management::NumericTablePtr copyToTable(size_t idx) const = 0;
54  virtual services::Status copyFromTable(const data_management::NumericTablePtr &table) = 0;
55  virtual services::Status copyFromTable(const data_management::NumericTablePtr &table, size_t idx) = 0;
56 };
57 typedef services::SharedPtr<LearnableParametersIface> LearnableParametersIfacePtr;
58 
63 class DAAL_EXPORT ModelImpl : public daal::algorithms::Model
64 {
65 public:
66  virtual ~ModelImpl() {}
67 
72  const services::SharedPtr<services::Collection<layers::NextLayers> > getNextLayers() const
73  {
74  return _nextLayers;
75  }
76 
83  services::Status setWeightsAndBiases(const data_management::NumericTablePtr &weightsAndBiases)
84  {
85  return _weightsAndBiases->copyFromTable(weightsAndBiases);
86  }
87 
92  const data_management::NumericTablePtr getWeightsAndBiases() const
93  {
94  return _weightsAndBiases->copyToTable();
95  }
96 
97 protected:
98  ModelImpl() :
99  _forwardLayers(new neural_networks::ForwardLayers),
100  _nextLayers(new services::Collection<layers::NextLayers>),
101  _weightsAndBiasesCreated(false), _storeWeightsInTable(false)
102  {}
103 
104  ModelImpl(services::Status &st) :
105  _weightsAndBiasesCreated(false), _storeWeightsInTable(false)
106  {
107  _forwardLayers.reset(new neural_networks::ForwardLayers);
108  if (!_forwardLayers)
109  st.add(services::ErrorMemoryAllocationFailed);
110  _nextLayers.reset(new services::Collection<layers::NextLayers>);
111  if (!_nextLayers)
112  st.add(services::ErrorMemoryAllocationFailed);
113  }
114 
122  ModelImpl(const neural_networks::ForwardLayersPtr &forwardLayers,
123  const services::SharedPtr<services::Collection<layers::NextLayers> > &nextLayers,
124  bool storeWeightsInTable = false) :
125  _forwardLayers(forwardLayers), _nextLayers(nextLayers),
126  _weightsAndBiasesCreated(false), _storeWeightsInTable(storeWeightsInTable) {}
127 
128  ModelImpl(const neural_networks::ForwardLayersPtr &forwardLayers,
129  const services::SharedPtr<services::Collection<layers::NextLayers> > &nextLayers,
130  bool storeWeightsInTable, services::Status &st) :
131  _forwardLayers(forwardLayers), _nextLayers(nextLayers),
132  _weightsAndBiasesCreated(false), _storeWeightsInTable(storeWeightsInTable) {}
133 
134  ModelImpl(const ModelImpl &model) :
135  _forwardLayers(model._forwardLayers), _nextLayers(model._nextLayers),
136  _storeWeightsInTable(model._storeWeightsInTable),
137  _weightsAndBiasesCreated(model._weightsAndBiasesCreated)/*,
138  _weightsAndBiases(model._weightsAndBiases->clone()) */ {}
139 
141  ModelImpl(const ModelImpl &model, services::Status &st) :
142  _forwardLayers(model._forwardLayers), _nextLayers(model._nextLayers),
143  _storeWeightsInTable(model._storeWeightsInTable),
144  _weightsAndBiasesCreated(model._weightsAndBiasesCreated)/*,
145  _weightsAndBiases(model._weightsAndBiases->clone()) */ {}
146 
147  services::Status checkWeightsAndBiasesAllocation()
148  {
149  using namespace services;
150  using namespace layers;
151 
152  _storeWeightsInTable = true;
153  size_t nLayers = _forwardLayers->size();
154  for (size_t i = 0; i < nLayers; i++)
155  {
156  forward::Input *forwardInput = _forwardLayers->get(i)->getLayerInput();
157  /* Check if weights and biases are allocated by user */
158  if (forwardInput->get(forward::weights) || forwardInput->get(forward::biases))
159  {
160  _storeWeightsInTable = false;
161  break;
162  }
163  }
164  return services::Status();
165  }
166 
167  services::Status connectForwardLayers(size_t layerId)
168  {
169  using namespace services;
170  using namespace layers;
171 
172  forward::LayerIfacePtr forwardLayer = _forwardLayers->get(layerId);
173  forwardLayer->allocateResult();
174  forward::ResultPtr forwardResult = forwardLayer->getLayerResult();
175  const NextLayers &next = _nextLayers->get(layerId);
176  for(size_t j = 0; j < next.size(); j++)
177  {
178  _forwardLayers->get(next[j])->addInput(forwardResult, j, 0 /* index in input object of next[j] forward layer */);
179  }
180  return services::Status();
181  }
182 
183  template<typename modelFPType>
184  DAAL_EXPORT services::Status createWeightsAndBiases(bool checkAllocation);
185 
186  bool _weightsAndBiasesCreated;
187  bool _storeWeightsInTable;
189  neural_networks::ForwardLayersPtr _forwardLayers;
190  services::SharedPtr<services::Collection<layers::NextLayers> > _nextLayers;
191  LearnableParametersIfacePtr _weightsAndBiases;
192 };
194 }
195 using interface1::ModelImpl;
196 using interface1::LearnableParametersIface;
197 using interface1::LearnableParametersIfacePtr;
198 }
199 }
200 }
201 #endif
daal
Definition: algorithm_base_common.h:31
daal::algorithms::neural_networks::interface1::ModelImpl::setWeightsAndBiases
services::Status setWeightsAndBiases(const data_management::NumericTablePtr &weightsAndBiases)
Definition: neural_networks_learnable_parameters.h:83
daal::algorithms::neural_networks::interface1::ForwardLayers
services::Collection< layers::forward::LayerIfacePtr > ForwardLayers
Represents a collection of forward stages of neural network layers.
Definition: neural_networks_types.h:57
daal::algorithms::neural_networks::interface1::ModelImpl::getNextLayers
const services::SharedPtr< services::Collection< layers::NextLayers > > getNextLayers() const
Definition: neural_networks_learnable_parameters.h:72
daal::services::ErrorMemoryAllocationFailed
Definition: error_indexes.h:146
daal::algorithms::classifier::prediction::model
Definition: classifier_predict_types.h:66
daal::algorithms::neural_networks::interface1::ModelImpl::_forwardLayers
neural_networks::ForwardLayersPtr _forwardLayers
Definition: neural_networks_learnable_parameters.h:189
daal::algorithms::classifier::training::weights
Definition: classifier_training_types.h:62
daal::algorithms::neural_networks::interface1::ModelImpl::ModelImpl
ModelImpl(const ModelImpl &model, services::Status &st)
Definition: neural_networks_learnable_parameters.h:141
daal::algorithms::neural_networks::interface1::LearnableParametersIface
Learnable parameters for the prediction stage of neural network algorithm.
Definition: neural_networks_learnable_parameters.h:47
daal::algorithms::neural_networks::interface1::ModelImpl::ModelImpl
ModelImpl(const neural_networks::ForwardLayersPtr &forwardLayers, const services::SharedPtr< services::Collection< layers::NextLayers > > &nextLayers, bool storeWeightsInTable=false)
Definition: neural_networks_learnable_parameters.h:122
daal::algorithms::neural_networks::interface1::ModelImpl::getWeightsAndBiases
const data_management::NumericTablePtr getWeightsAndBiases() const
Definition: neural_networks_learnable_parameters.h:92
daal::algorithms::neural_networks::interface1::ModelImpl
Class Model object for the prediction stage of neural network algorithm.
Definition: neural_networks_learnable_parameters.h:63
daal::algorithms::neural_networks::interface1::ModelImpl::_storeWeightsInTable
bool _storeWeightsInTable
Definition: neural_networks_learnable_parameters.h:187
daal::algorithms::neural_networks::interface1::ModelImpl::_nextLayers
services::SharedPtr< services::Collection< layers::NextLayers > > _nextLayers
Definition: neural_networks_learnable_parameters.h:190

For more complete information about compiler optimizations, see our Optimization Notice.