Modules/DataAnalysis/public/FCNN.hpp
2024-11-24 22:41:12 +03:00

77 lines
1.3 KiB
C++

#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;
public:
template <class tArchiver>
void archive(tArchiver& ar) {
ar % val;
}
};
Parameter bias;
Buffer<Parameter> weights;
halnf activationValue = 0;
halnf activationValueLinear = 0;
halnf cache;
public:
template <class tArchiver>
void archive(tArchiver& ar) {
ar % bias;
ar % weights;
}
};
Buffer<Neuron> neurons;
public:
template <class tArchiver>
void archive(tArchiver& ar) {
ar % neurons;
}
};
public:
FCNN() = default;
explicit FCNN(const Buffer<halni>& description);
void initializeRandom(const Buffer<halni>& description);
void evaluate(const Buffer<halnf>& input, Buffer<halnf>& output);
halnf calcCost(const Buffer<halnf>& output);
void clearGrad();
void calcGrad(const Buffer<halnf>& output);
void applyGrad(halnf step);
public:
template <class tArchiver>
void archive(tArchiver& ar) {
ar % mLayers;
}
public:
Buffer<Layer> mLayers;
halni mAvgCount = 0;
};
};