#pragma once #include "Buffer.hpp" #include "DataAnalysisCommon.hpp" namespace tp { class FullyConnectedNN { struct Layer { struct Neuron { halnf mBias = 0; Buffer mWeights; halnf mActivationValue = 0; halnf mActivationValueLinear = 0; }; Buffer mNeurons; }; struct LayerCache { struct NeuronCache { halnf mBiasGrad = 0; Buffer mWeightsGrad; }; halnf mCache = 0; Buffer mNeurons; }; public: FullyConnectedNN() = default; void initializeRandom(Buffer description); void evaluate(const Buffer& input, Buffer& output); void clearGrad(); halnf calcCost(const Buffer& output); void calcGrad(const Buffer& output); void applyGrad(); private: Buffer mLayers; Buffer mLayersCache; halni mAvgCount = 0; }; };