8 #ifndef CSCNEURALNETWORKBUILDERTENSORFLOW_H_
9 #define CSCNEURALNETWORKBUILDERTENSORFLOW_H_
14 #include "tensorflow/c/c_api.h"
29 TF_Graph *getGraph()
const;
30 TF_Status *getStatus()
const;
31 TF_Operation *getGraphOperation()
const;
32 TF_Output *getTrainableVars();
33 TF_Output *getPartialDerivatives();
34 vector<const char *> &getAssignationsInitNames();
35 vector<const char *> &getAssignationsBestValuesNames();
36 vector<const char *> &getAssignationsInitAdagradNames();
37 vector<const char *> &getAssignationsInitAdadeltaGradientNames();
38 vector<const char *> &getAssignationsInitAdadeltaUpdateNames();
39 vector<const char *> &getAssignationsInitAdamFirstMomentNames();
40 vector<const char *> &getAssignationsInitAdamSecondMomentNames();
41 vector<const char *> &getVarNames();
42 vector<const char *> &getVarBestValueNames();
43 vector<const char *> &getVarAdagradValueNames();
44 vector<const char *> &getVarAdadeltaGradientValueNames();
45 vector<const char *> &getVarAdadeltaUpdateValueNames();
46 vector<const char *> &getVarAdamFirstMomentValueNames();
47 vector<const char *> &getVarAdamSecondMomentValueNames();
48 vector<const char *> &getUpdateNames();
50 void setWeightsLoadedFromModel(
float **weightsLoadedFromModelUpdate);
51 void setBiasesLoadedFromModel(
float **biasesLoadedFromModelUpdate);
54 void allocatePartialDerivatives(
int nbOperations);
56 void allocateAndInitializeTrainableVars(
int nbOperations);
57 void allocateAndInitializeAccumulators(
int nbOperations);
58 void allocateAndInitializeGradientAccumulators(
int nbOperations);
59 void allocateAndInitializeUpdateAccumulators(
int nbOperations);
60 void allocateAndInitializeMFirstMomentEstimateOutputs(
int nbOperations);
61 void allocateAndInitializeVSecondMomentEstimateOutputs(
int nbOperations);
64 void createVariableInGraph(
const int64_t *dims,
int num_dims,
float *data,
int num_data,
char *name);
65 void createConstantVariableAndAssignOperation(
const char *namePrefix,
const char *variablePrefix,
const char *assignPrefix,
const char *name,
int numDims,
const int64_t *dims,
int numData, std::vector<const char *> &valueNames, std::vector<const char *> &assignNames,
float *constantValue);
66 TF_Operation *createOperationFromTwoOperations(TF_Operation *a, TF_Operation *b,
const char *operationString,
const char *operationName);
67 TF_Operation *createOperationFromSingleOperation(TF_Operation *operation,
const char *operationString,
const char *operationName);
68 TF_Operation *createConstOperation(TF_Tensor *tensor,
char *name, TF_DataType dataType);
69 TF_Operation *createVariableV2Operation(
const int64_t *dims,
int numDims,
const char *name, TF_DataType dataType);
70 TF_Operation *createMatriceMultiplicationOperation(TF_Operation *a, TF_Operation *b);
71 TF_Operation *createAdditionOperation(TF_Operation *a, TF_Operation *b);
72 TF_Operation *createActivationFunctionOperation(TF_Operation *input_op,
CscActivationFunction activFuncName,
int nbActivationFunctionOperation);
73 TF_Operation *createPlaceHolderOperation(
int numFeatures,
const char *name);
74 TF_Operation *createDenseLayerOperation(TF_Operation *input,
const char *weightVarName,
const char *biasVarName,
CscActivationFunction activFuncName,
int denseLayerId);
77 TF_Operation *createInputLayerOperation(
int numFeatures);
80 TF_Operation *createTargetPlaceHoldersOperation();
97 TF_Operation *createCostFunctionOperation(TF_Operation *predictions,
CscLossFunction lossFunction);
98 TF_Operation *createMeanSquaredErrorCostFunctionOperation(TF_Operation *predictions);
99 TF_Operation *createMeanAbsoluteErrorCostFunctionOperation(TF_Operation *predictions);
102 TF_Operation *createUpdateOperation(
CscOptimizer optimizer,
int nthVariable);
103 TF_Operation *createGradientDescentUpdateOperation(TF_Output variable, TF_Output gradient);
104 TF_Operation *createAdagradUpdateOperation(TF_Output variable, TF_Output gradient, TF_Output accumulation);
105 TF_Operation *createAdadeltaUpdateOperation(TF_Output variable, TF_Output gradient, TF_Output accumGrad, TF_Output accumUpdate);
106 TF_Operation *createAdamUpdateOperation(TF_Output variable, TF_Output gradient, TF_Output mFirstMomentEstimate, TF_Output vSecondMomentEstimate);
107 void createAllUpdtateOperations(
CscOptimizer optimizer);
109 static int printTensorShapeOfOperationAndReturnNumberNeurons(TF_Graph *graph,
const char *operationName);
112 unique_ptr<CscLogger> loggerBuilder;
117 TF_Graph *graph =
nullptr;
118 TF_Status *status =
nullptr;
119 TF_Operation *graphOperation =
nullptr;
120 TF_Output *partialDerivatives =
nullptr;
121 TF_Output *trainableVars =
nullptr;
122 TF_Output *accumulators =
nullptr;
123 TF_Output *gradientAccumulators =
nullptr;
124 TF_Output *updateAccumulators =
nullptr;
125 TF_Output *mFirstMomentEstimateOutputs =
nullptr;
126 TF_Output *vSecondMomentEstimateOutputs =
nullptr;
128 long counterOperations;
129 vector<const char *> assignationsInitNames;
130 vector<const char *> assignationsBestValuesNames;
131 vector<const char *> assignationsInitAdagradNames;
132 vector<const char *> assignationsInitAdadeltaGradientNames;
133 vector<const char *> assignationsInitAdadeltaUpdateNames;
134 vector<const char *> assignationsInitAdamFirstMomentNames;
135 vector<const char *> assignationsInitAdamSecondMomentNames;
136 vector<const char *> varNames;
137 vector<const char *> varBestValueNames;
138 vector<const char *> varAdagradValueNames;
139 vector<const char *> varAdadeltaGradientValueNames;
140 vector<const char *> varAdadeltaUpdateValueNames;
141 vector<const char *> varAdamFirstMomentValueNames;
142 vector<const char *> varAdamSecondMomentValueNames;
143 vector<const char *> updateNames;
144 float **weightsLoadedFromModel =
nullptr;
145 float **biasesLoadedFromModel =
nullptr;
148 void printTensor(TF_Tensor *tensor);
151 const char *generateUniqueCharArray();
168 bool checkStatus(
const string methodName);
169 template<
typename T> TF_Tensor *createScalarTensor(T value);
170 void allocateAndInitializeTF_OutputList(TF_Output **listTF_Output,
const vector<const char *> &namesTF_Output,
int nbOperations);