27#ifndef TMVA_DNN_DENSELAYER
28#define TMVA_DNN_DENSELAYER
58template <
typename Architecture_t>
62 using Scalar_t =
typename Architecture_t::Scalar_t;
63 using Matrix_t =
typename Architecture_t::Matrix_t;
64 using Tensor_t =
typename Architecture_t::Tensor_t;
108 void Print()
const override;
135template <
typename Architecture_t>
139 :
VGeneralLayer<Architecture_t>(batchSize, 1, 1, inputWidth, 1, 1, width, 1, width, inputWidth, 1, width, 1, 1,
140 batchSize, width, init),
151template <
typename Architecture_t>
163template <
typename Architecture_t>
175template <
typename Architecture_t>
186template <
typename Architecture_t>
191 Architecture_t::DropoutForward(input,
static_cast<TDescriptors *
> (
nullptr),
205template <
typename Architecture_t>
223 activations_backward);
230template <
typename Architecture_t>
233 std::cout <<
" DENSE Layer: \t";
234 std::cout <<
" ( Input =" << std::setw(6) << this->
GetWeightsAt(0).GetNcols();
235 std::cout <<
" , Width =" << std::setw(6) << this->
GetWeightsAt(0).GetNrows() <<
" ) ";
237 std::cout <<
"\tOutput = ( " << std::setw(2) << this->
GetOutput().GetFirstSize() <<
" ," << std::setw(6) << this->
GetOutput().GetShape()[0] <<
" ," << std::setw(6) << this->
GetOutput().GetShape()[1] <<
" ) ";
239 std::vector<std::string> activationNames = {
"Identity",
"Relu",
"Sigmoid",
"Tanh",
"SymmRelu",
"SoftSign",
"Gauss" };
240 std::cout <<
"\t Activation Function = ";
241 std::cout << activationNames[ static_cast<int>(
fF) ];
243 std::cout << std::endl;
248template <
typename Architecture_t>
266template <
typename Architecture_t>
ERegularization fReg
The regularization method.
Tensor_t fDerivatives
activation function gradient
ERegularization GetRegularization() const
typename Architecture_t::Matrix_t Matrix_t
const Tensor_t & GetInputActivation() const
Scalar_t fWeightDecay
The weight decay.
Tensor_t fInputActivation
output of GEMM and input to activation function
Architecture_t::ActivationDescriptor_t fActivationDesc
EActivationFunction fF
Activation function of the layer.
TDenseLayer(size_t BatchSize, size_t InputWidth, size_t Width, EInitialization init, Scalar_t DropoutProbability, EActivationFunction f, ERegularization reg, Scalar_t weightDecay)
Constructor.
~TDenseLayer()
Destructor.
void SetDropoutProbability(Scalar_t dropoutProbability) override
Set dropout probabilities.
virtual void AddWeightsXMLTo(void *parent) override
Writes the information and the weights about the layer in an XML node.
Scalar_t GetDropoutProbability() const
Getters.
void Forward(Tensor_t &input, bool applyDropout=false) override
Compute activation of the layer for the given input.
Tensor_t & GetInputActivation()
EActivationFunction GetActivationFunction() const
typename Architecture_t::Scalar_t Scalar_t
typename Architecture_t::Tensor_t Tensor_t
virtual void ReadWeightsFromXML(void *parent) override
Read the information and the weights about the layer from XML node.
Scalar_t fDropoutProbability
Probability that an input is active.
Scalar_t GetWeightDecay() const
void Backward(Tensor_t &gradients_backward, const Tensor_t &activations_backward) override
Compute weight, bias and activation gradients.
void Print() const override
std::vector<Matrix_t> &inp1, std::vector<Matrix_t> &inp2);
const Matrix_t & GetWeightsAt(size_t i) const
const Tensor_t & GetOutput() const
void WriteMatrixToXML(void *node, const char *name, const Matrix_t &matrix)
const Tensor_t & GetActivationGradients() const
const Matrix_t & GetBiasesAt(size_t i) const
const Matrix_t & GetBiasGradientsAt(size_t i) const
void ReadMatrixXML(void *node, const char *name, Matrix_t &matrix)
const Matrix_t & GetWeightGradientsAt(size_t i) const
VGeneralLayer(size_t BatchSize, size_t InputDepth, size_t InputHeight, size_t InputWidth, size_t Depth, size_t Height, size_t Width, size_t WeightsNSlices, size_t WeightsNRows, size_t WeightsNCols, size_t BiasesNSlices, size_t BiasesNRows, size_t BiasesNCols, size_t OutputNSlices, size_t OutputNRows, size_t OutputNCols, EInitialization Init)
Constructor.
static TString Itoa(Int_t value, Int_t base)
Converts an Int_t to a TString with respect to the base specified (2-36).
XMLNodePointer_t NewChild(XMLNodePointer_t parent, XMLNsPointer_t ns, const char *name, const char *content=nullptr)
create new child element for parent node
XMLAttrPointer_t NewAttr(XMLNodePointer_t xmlnode, XMLNsPointer_t, const char *name, const char *value)
creates new attribute for xmlnode, namespaces are not supported for attributes
void addRegularizationGradients(typename Architecture_t::Matrix_t &A, const typename Architecture_t::Matrix_t &W, typename Architecture_t::Scalar_t weightDecay, ERegularization R)
Add the regularization gradient corresponding to weight matrix W, to the matrix A.
double weightDecay(double error, ItWeight itWeight, ItWeight itWeightEnd, double factorWeightDecay, EnumRegularization eRegularization)
compute the weight decay for regularization (L1 or L2)
ERegularization
Enum representing the regularization type applied for a given layer.
EActivationFunction
Enum that represents layer activation functions.
create variable transformations