#pragma once #include "Buffer.hpp" #include "DataAnalysisCommon.hpp" namespace tp { // Fully connected neural network class FCNN { struct Layer { struct Neuron { struct Parameter { Parameter() = default; Parameter(halnf in) : val(in) {} halnf val = 0; halnf grad = 0; }; Parameter bias; Buffer weights; halnf activationValue = 0; halnf activationValueLinear = 0; halnf cache; }; Buffer neurons; }; public: FCNN() = default; explicit FCNN(const Buffer& description); void initializeRandom(const Buffer& description); void evaluate(const Buffer& input, Buffer& output); halnf calcCost(const Buffer& output); void clearGrad(); void calcGrad(const Buffer& output); void applyGrad(halnf step); public: Buffer mLayers; halni mAvgCount = 0; }; };