Conscience Core
CscNeuralNetworkTensorFlow.h
Go to the documentation of this file.
1 /*
2  * CscNeuralNetworkTensorFlow.h
3  *
4  * Created on: 24 novembre 2023
5  * Author: Max Lhermitte
6  */
7 
8 #ifndef CSCNEURALNETWORKTENSORFLOW_H_
9 #define CSCNEURALNETWORKTENSORFLOW_H_
10 
12 #include "Util/conscience_util.h"
13 #include "CscCommon.h"
14 #include "tensorflow/c/c_api.h"
15 #include "Util/json.h"
18 
19 using namespace conscience_utils::JSON;
20 
21 
22 namespace conscience_core::ai::nn {
23 
25 public:
26  CscNeuralNetworkTensorFlow(CscNeuralNetworkType neuralNetworkType, NeuralNetworkHyperparameters *neuralNetworkHyperparametersInit, TrainingHyperparameters *trainingHyperparametersInit);
27  CscNeuralNetworkTensorFlow(CscNeuralNetworkType neuralNetworkType, NeuralNetworkHyperparameters *neuralNetworkHyperparametersInit, TrainingHyperparameters *trainingHyperparametersInit, float **weightsLoadedFromModel, float **biasesLoadedFromModel, bool withCostFunction);
28  virtual ~CscNeuralNetworkTensorFlow();
29 
30  CscNeuralNetworkTensorFlow *getDuplicata();
31 
32  vector<TF_Session *> getSessions();
33  CscNeuralNetworkBuilderTensorFlow *getBuilder() const;
34  CscNeuralNetworkPersistenceTensorFlow *getPersistence() const;
35 
53  ResultTraining trainNeuralNetwork(const int nbEpochs, const int nbMiniBatchs, DataSet *trainingDataSet, DataSet *validationDataSet, const bool debugMode = false) override;
63  float testNeuralNetworkOnValidationDataSet(DataSet *validationDataSet, const bool nnNeverInitialized = false);
76  static CscNeuralNetworkTensorFlow *loadModelFromDirectory(const fs::path &dirPath, bool forTraining);
89  vector<float> executeWithoutCostFunction(TF_Session *session, float **inputs);
90 
91 private:
92  // Attributes
93  int timeCounter = 0;
94  vector<TF_Session *> sessions;
95  CscNeuralNetworkPersistenceTensorFlow *persistence = nullptr;
96  CscNeuralNetworkBuilderTensorFlow *builder = nullptr;
97 
98  // Methods
112  void createNeuralNetwork(CscActivationFunction hiddenLayersFunctionActivation, CscActivationFunction outputLayerFunctionActivation, CscLossFunction lossFunction, CscInitializationWeightsStrategy initilizationStrategy, CscInitializationBiasStrategy initializationBiasStrategy, bool withCostFunction) override;
113 
114  // Methods for training
115  float executeGraph(TF_Tensor *tensorInputs, TF_Tensor *tensorTargets, TF_Tensor *outputTensor, TF_Session *session);
116  float *executeGraphWithoutCostFunction(TF_Tensor *tensorInputs, TF_Tensor *outputTensor, TF_Session *session);
117  void configureGraphGradients(TF_Tensor *inputTensor, TF_Session *session);
118  void updateWeightsAndBias(TF_Session *session, TF_Tensor *tensorInputs, TF_Tensor *tensorTarget, bool debugMode = false);
119 
120  float executeOnMiniBatches(TF_Session *session, float ***inputs, float ***targets, const int epoch, const int nbEpoch, const int nbMiniBatchs, const int dataPerMinibatch, const bool isTraining);
121 
122  // Methods for assignations
123  void runAssignations(TF_Session *session, const std::vector<const char *>& assignationsNames, const char *statusCheckName);
124  void assignationInitValues(TF_Session *session);
125  void assignationAdagradInitValues(TF_Session *session);
126  void assignationAdadeltaInitValues(TF_Session *session);
127  void assignationAdamInitValues(TF_Session *session);
128  void assignationBestValues(TF_Session *session);
129 
130  // Methods for run
131  void runWithoutInputsAndOutputs(TF_Operation *operations, int nbOperations, TF_Session *session);
132 
133  // Debug methods
134  void printTensor(TF_Tensor *tensor);
135  void fetchWeightsAndBiases(TF_Session *session, vector<const char *> varNames);
136 
137  // Others methods
154  bool checkStatus(const string methodName);
155  TF_Tensor *createTensorMatriceOrder2(int nbLineMatrice, int nbColumnMatrice, float **values);
156  void storeAllWeightsAndBiasesInTensorArray(TF_Session *session, vector<const char *> weightsAndBiasesVariarblesNames, TF_Tensor **tensorArrayToStoreWeightsAndBiases);
157 };
158 }
159 
160 #endif /* CSCNEURALNETWORKTENSORFLOW_H_ */
conscience_core::ai::nn::CscInitializationBiasStrategy
CscInitializationBiasStrategy
Definition: CscNeuralNetwork.h:61
CSC_DLL_IMPORTEXPORT
#define CSC_DLL_IMPORTEXPORT
Definition: os.h:31
conscience_util.h
conscience_core::ai::nn::CscNeuralNetwork::DataSet
Definition: CscNeuralNetwork.h:101
conscience_core::ai::nn::CscNeuralNetwork::NeuralNetworkHyperparameters
Definition: CscNeuralNetwork.h:184
conscience_core::ai::nn::CscNeuralNetworkType
CscNeuralNetworkType
Definition: CscNeuralNetwork.h:20
conscience_core::ai::nn
Definition: CscNeuralNetwork.cpp:12
conscience_core::ai::nn::CscInitializationWeightsStrategy
CscInitializationWeightsStrategy
Definition: CscNeuralNetwork.h:53
CscNeuralNetwork.h
conscience_core::ai::nn::CscNeuralNetworkBuilderTensorFlow
Definition: CscNeuralNetworkBuilderTensorFlow.h:23
conscience_core::ai::nn::CscActivationFunction
CscActivationFunction
Definition: CscNeuralNetwork.h:27
conscience_utils::JSON
Definition: CscCommandMetadataBuilder.h:20
CscCommon.h
conscience_core::ai::nn::CscNeuralNetwork::TrainingHyperparameters
Structure representing the hyperparameters for model training.
Definition: CscNeuralNetwork.h:139
conscience_core::ai::nn::CscNeuralNetwork::ResultTraining
Definition: CscNeuralNetwork.h:115
conscience_core::ai::nn::CscNeuralNetworkPersistenceTensorFlow
Definition: CscNeuralNetworkPersistenceTensorFlow.h:34
conscience_core::ai::nn::CscLossFunction
CscLossFunction
Definition: CscNeuralNetwork.h:46
CscNeuralNetworkPersistenceTensorFlow.h
CscNeuralNetworkBuilderTensorFlow.h
json.h
conscience_core::ai::nn::CscNeuralNetwork
Definition: CscNeuralNetwork.h:79
conscience_core::ai::nn::CscNeuralNetworkTensorFlow
Definition: CscNeuralNetworkTensorFlow.h:24