Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
ROperator_Selu.hxx
Go to the documentation of this file.
1#ifndef TMVA_SOFIE_ROPERATOR_SELU
2#define TMVA_SOFIE_ROPERATOR_SELU
3
5#include "TMVA/ROperator.hxx"
6#include "TMVA/RModel.hxx"
7
8#include <iomanip>
9#include <limits>
10#include <sstream>
11
12namespace TMVA{
13namespace Experimental{
14namespace SOFIE{
15
16template <typename T>
17class ROperator_Selu final : public ROperator
18{
19
20private:
21 float fAlpha = 1.67326319217681884765625;
22 float fGamma = 1.05070102214813232421875;
23 std::string fNX;
24 std::string fNY;
25 std::vector<size_t> fShape;
26
27public:
29 ROperator_Selu(float alpha, float gamma, std::string nameX, std::string nameY)
30 : fAlpha(alpha), fGamma(gamma), fNX(UTILITY::Clean_name(nameX)), fNY(UTILITY::Clean_name(nameY))
31 {
34 }
35
36 void Initialize(RModel& model) override {
37 if (model.CheckIfTensorAlreadyExist(fNX) == false){ //input must be a graph input, or already initialized intermediate tensor
38 throw std::runtime_error("TMVA SOFIE Selu Op Input Tensor is not found in model");
39 }
40 fShape = model.GetTensorShape(fNX);
41 model.AddIntermediateTensor(fNY, model.GetTensorType(fNX), fShape);
42 }
43
44
45 std::string Generate(std::string OpName) override {
46 OpName = "op_" + OpName;
47 if (fShape.empty()){
48 throw std::runtime_error("TMVA SOFIE Operator Selu called to Generate without being initialized first");
49 }
50 std::stringstream out;
51 int length = 1;
52 for(auto& i: fShape){
53 length *= i;
54 }
55 out << std::setprecision(std::numeric_limits<float>::max_digits10);
56 out << "\t" << "float " << OpName << "_alpha = " << fAlpha << ";\n";
57 out << "\t" << "float " << OpName << "_gamma = " << fGamma << ";\n";
58 out << "\t" << "for (int id = 0; id < " << length << " ; id++){\n";
59 out << "\t\t" << "tensor_" << fNY << "[id] = " << OpName << "_gamma * (std::max(float(0.0), tensor_" << fNX
60 << "[id]) + std::min(float(0.0), " << OpName << "_alpha * (std::exp(tensor_" << fNX << "[id]) - 1)));\n";
61 out << "\t}\n";
62 return out.str();
63 }
64
65 std::vector<std::string> GetStdLibs() override { return { std::string("cmath") };}
66};
67
68}//SOFIE
69}//Experimental
70}//TMVA
71
72
73#endif //TMVA_SOFIE_ROPERATOR_SELU
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h length
std::vector< std::string > GetStdLibs() override
void Initialize(RModel &model) override
ROperator_Selu(float alpha, float gamma, std::string nameX, std::string nameY)
std::string Generate(std::string OpName) override
std::vector< std::string_view > fInputTensorNames
Definition ROperator.hxx:44
std::vector< std::string_view > fOutputTensorNames
Definition ROperator.hxx:45
create variable transformations