with Text_IO; use Text_IO; with ada.integer_text_IO; use ada.integer_text_IO; with Ada.Strings.Unbounded; use Ada.Strings.Unbounded; with Ada.Strings.Unbounded.Text_IO; use Ada.Strings.Unbounded.Text_IO; with unbounded_strings; use unbounded_strings; use unbounded_strings.strings_table_package; use unbounded_strings.unbounded_string_list_package; with Input_sources.File; use Input_Sources.File; with Ada.Directories; use Ada.Directories; with Ada.Long_Long_Integer_Text_IO; use Ada.Long_Long_Integer_Text_IO; with Ada.Numerics.Elementary_Functions; use Ada.Numerics.Elementary_Functions; package body cnn_pmml is quote : Character := Character'Val(39); guil : Character := Character'Val(34); tab : Character := Character'Val(9); procedure Initialization_PMML (Filename : in String; FileDescriptor : out File_Type; Description : in Unbounded_String := To_Unbounded_string(""); Timestamp : in Unbounded_String := To_Unbounded_string("2023-13-02 00:00:00"); NbLayer : in Integer ) is Default_Integer_Width : Integer := Ada.Integer_Text_IO.Default_Width; begin Ada.Integer_Text_IO.Default_Width := 0; if(Exists(Filename)=True) then Open(FileDescriptor, Out_File, Filename); else Create(FileDescriptor, Out_File, Filename); end if; Put_Line(FileDescriptor, ""); Put_Line(FileDescriptor, ""); Put_Line(FileDescriptor, tab & "
"); Put_Line(FileDescriptor, tab & tab & "" & Timestamp & ""); Put_Line(FileDescriptor, tab & "
"); --Warning NOT GENERIC Put_Line(FileDescriptor, tab & ""); Put_Line(FileDescriptor, tab & tab & ""); Put_Line(FileDescriptor, tab & tab & ""); Put_Line(FileDescriptor, tab & tab & tab & ""); Put_Line(FileDescriptor, tab & tab & ""); Put_Line(FileDescriptor, tab & ""); Put(FileDescriptor, tab & ""); Put_Line(FileDescriptor, tab & tab & ""); Put_Line(FileDescriptor, tab & tab & tab & ""); Put_Line(FileDescriptor, tab & tab & tab & ""); Put_Line(FileDescriptor, tab & tab & ""); Put_Line(FileDescriptor, tab & tab & ""); Put_Line(FileDescriptor, tab & tab & tab & ""); Put_Line(FileDescriptor, tab & tab & ""); Ada.Integer_Text_IO.Default_Width := Default_Integer_Width; end Initialization_PMML; procedure Terminate_PMML (FileDescriptor : in File_Type ) is begin --Warning not generic Put_Line(FileDescriptor, tab & tab & ""); Put_Line(FileDescriptor, tab & ""); Put_Line(FileDescriptor, "
"); --close(FileDescriptor); FileDescriptor Should be a variable ? end Terminate_PMML; --DIFFERENT TYPE OF LAYERS -------------------------------------------------------------------------------------------- -- -- CREATE INPUT LAYER -- -------------------------------------------------------------------------------------------- procedure Create_InputLayer (MyFile : in File_Type; LayerName : in Unbounded_string; Size : in ParamVal3D; OutboundToken : out Token ) is Default_Integer_Width : Integer := Ada.Integer_Text_IO.Default_Width; Default_Long_Long_Integer_Width : Integer := Ada.Long_Long_Integer_Text_IO.Default_Width; begin Ada.Long_Long_Integer_Text_IO.Default_Width := 0; Ada.Integer_Text_IO.Default_Width := 0; OutboundToken := Size(0)*Size(1)*Size(2); Put_Line(MyFile, tab & tab & ""); Put_Line(MyFile, tab & tab & tab & ""); Put(MyFile, tab & tab & tab & tab & ""); Put(MyFile, Size(0)); Put(MyFile, " "); Put(MyFile, Size(1)); Put(MyFile, " "); Put(MyFile, Size(2)); Put_Line(MyFile, ""); Put_Line(MyFile, tab & tab & tab & ""); Put_Line(MyFile, tab & tab & tab & ""); Put(MyFile, tab & tab & tab & tab & ""); Put(MyFile, OutboundToken); Put_Line(MyFile, ""); Put_Line(MyFile, tab & tab & tab & ""); Put_Line(MyFile, tab & tab & ""); Ada.Long_Long_Integer_Text_IO.Default_Width := Default_Long_Long_Integer_Width; Ada.Integer_Text_IO.Default_Width := Default_Integer_Width; end Create_InputLayer; -------------------------------------------------------------------------------------------- -- -- CREATE CONVOLUTION 2D LAYER -- -------------------------------------------------------------------------------------------- procedure Create_Conv2D (MyFile : in File_Type; LayerName : in Unbounded_string; NameInboundNode : in Unbounded_string; KernelSize : in ParamVal2D; DilationRate : in ParamVal2D; KernelStrides : in ParamVal2D; ChannelSize : in Natural; InboundToken : in Token := 1; OutboundToken : out Token ) is Default_Integer_Width : Integer := Ada.Integer_Text_IO.Default_Width; Default_Long_Long_Integer_Width : Integer := Ada.Long_Long_Integer_Text_IO.Default_Width; Temp : Token; Temp1 : Long_Long_Integer; Temp2 : Long_Long_Integer; Temp3 : Long_Long_Integer; begin Ada.Long_Long_Integer_Text_IO.Default_Width := 0; Ada.Integer_Text_IO.Default_Width := 0; Temp := Token(Sqrt(Float(InboundToken))); --Temp1 := Token(Sqrt(Float(KernelSize(0)))); --OutboundToken := (((Temp - Temp1)+2*DilationRate(0)/KernelStrides(0))+1)**2; Temp1 := Long_Long_Integer(Sqrt(Float(KernelSize(0)*KernelSize(1)))); Temp2 := DilationRate(0)*DilationRate(1); Temp3 := KernelStrides(0)*KernelStrides(1); OutboundToken := (((Temp - Temp1)+2*(Temp2)/(Temp3))+1)**2; Put_Line(MyFile, tab & tab & ""); Put_Line(MyFile, tab & tab & tab & ""); Put_Line(MyFile, tab & tab & tab & tab & "" & NameInboundNode & ""); Put_Line(MyFile, tab & tab & tab & ""); Put_Line(MyFile, tab & tab & tab & ""); Put(MyFile, tab & tab & tab & tab & ""); Put(MyFile, InboundToken); Put_Line(MyFile, ""); Put_Line(MyFile, tab & tab & tab & ""); Put_Line(MyFile, tab & tab & tab & ""); Put(MyFile, tab & tab & tab & tab & ""); Put(MyFile, OutboundToken); Put_Line(MyFile, ""); Put_Line(MyFile, tab & tab & tab & ""); Put(MyFile, tab & tab & tab & ""); Put_Line(MyFile, tab & tab & tab & tab & ""); Put(MyFile, tab & tab & tab & tab & tab & ""); Put(MyFile, DilationRate(0)); Put(MyFile, " "); Put(MyFile, DilationRate(1)); Put_Line(MyFile, ""); Put_Line(MyFile, tab & tab & tab & tab & ""); Put_Line(MyFile, tab & tab & tab & tab & ""); Put(MyFile, tab & tab & tab & tab & tab & ""); Put(MyFile, KernelSize(0)); Put(MyFile, " "); Put(MyFile, KernelSize(1)); Put_Line(MyFile, ""); Put_Line(MyFile, tab & tab & tab & tab & ""); Put_Line(MyFile, tab & tab & tab & tab & ""); Put(MyFile, tab & tab & tab & tab & tab & ""); Put(MyFile, KernelStrides(0)); Put(MyFile, " "); Put(MyFile, KernelStrides(1)); Put_Line(MyFile, ""); Put_Line(MyFile, tab & tab & tab & tab & ""); Put_Line(MyFile, tab & tab & tab & ""); Put_Line(MyFile, tab & tab & ""); Ada.Long_Long_Integer_Text_IO.Default_Width := Default_Long_Long_Integer_Width; Ada.Integer_Text_IO.Default_Width := Default_Integer_Width; end Create_Conv2D; -------------------------------------------------------------------------------------------- -- -- CREATE MAX POOLING LAYER -- -------------------------------------------------------------------------------------------- procedure Create_MaxPooling2D (MyFile : in File_Type; LayerName : in Unbounded_string; NameInboundNode : in Unbounded_string; PoolSize : in ParamVal2D; PoolStrides : in ParamVal2D; ChannelSize : in out Natural; InboundToken : in Token := 1; OutboundToken : out Token ) is Default_Integer_Width : Integer := Ada.Integer_Text_IO.Default_Width; Default_Long_Long_Integer_Width : Integer := Ada.Long_Long_Integer_Text_IO.Default_Width; begin Ada.Long_Long_Integer_Text_IO.Default_Width := 0; Ada.Integer_Text_IO.Default_Width := 0; OutboundToken := InboundToken/4; Put_Line(MyFile, tab & tab & ""); Put_Line(MyFile, tab & tab & tab & ""); Put_Line(MyFile, tab & tab & tab & tab & "" & NameInboundNode & ""); Put_Line(MyFile, tab & tab & tab & ""); Put_Line(MyFile, tab & tab & tab & ""); Put(MyFile, tab & tab & tab & tab & ""); Put(MyFile, InboundToken); Put_Line(MyFile, ""); Put_Line(MyFile, tab & tab & tab & ""); Put_Line(MyFile, tab & tab & tab & ""); Put(MyFile, tab & tab & tab & tab & ""); Put(MyFile, OutboundToken); Put_Line(MyFile, ""); Put_Line(MyFile, tab & tab & tab & ""); Put_Line(MyFile, tab & tab & tab & ""); Put(MyFile, tab & tab & tab & tab & ""); Put(MyFile, PoolSize(0)); Put(MyFile, " "); Put(MyFile, PoolSize(1)); Put_Line(MyFile, ""); Put_Line(MyFile, tab & tab & tab & ""); Put_Line(MyFile, tab & tab & tab & ""); Put(MyFile, tab & tab & tab & tab & ""); Put(MyFile, PoolStrides(0)); Put(MyFile, " "); Put(MyFile, PoolStrides(1)); Put_Line(MyFile, ""); Put_Line(MyFile, tab & tab & tab & ""); Put_Line(MyFile, tab & tab & ""); ChannelSize := ChannelSize*2; Ada.Long_Long_Integer_Text_IO.Default_Width := Default_Long_Long_Integer_Width; Ada.Integer_Text_IO.Default_Width := Default_Integer_Width; end Create_MaxPooling2D; -------------------------------------------------------------------------------------------- -- -- CREATE CONCATENATE LAYER -- -------------------------------------------------------------------------------------------- procedure Create_Concatenate (MyFile : in File_Type; LayerName : in Unbounded_string; NameInboundNode1 : in Unbounded_string; NameInboundNode2 : in Unbounded_string; InboundToken1 : in Token := 1; InboundToken2 : in Token := 1; OutboundToken : out Token ) is Default_Integer_Width : Integer := Ada.Integer_Text_IO.Default_Width; Default_Long_Long_Integer_Width : Integer := Ada.Long_Long_Integer_Text_IO.Default_Width; begin Ada.Long_Long_Integer_Text_IO.Default_Width := 0; Ada.Integer_Text_IO.Default_Width := 0; OutboundToken := InboundToken1; Put_Line(MyFile, tab & tab & ""); Put_Line(MyFile, tab & tab & tab & ""); Put_Line(MyFile, tab & tab & tab & tab & "" & NameInboundNode1 & " " & NameInboundNode2 & ""); Put_Line(MyFile, tab & tab & tab & ""); Put_Line(MyFile, tab & tab & tab & ""); Put(MyFile, tab & tab & tab & tab & ""); Put(MyFile, InboundToken1); Put(MyFile, " "); Put(MyFile, InboundToken2); Put_Line(MyFile, ""); Put_Line(MyFile, tab & tab & tab & ""); Put_Line(MyFile, tab & tab & tab & ""); Put(MyFile, tab & tab & tab & tab & ""); Put(MyFile, OutboundToken); Put_Line(MyFile, ""); Put_Line(MyFile, tab & tab & tab & ""); Put_Line(MyFile, tab & tab & ""); Ada.Long_Long_Integer_Text_IO.Default_Width := Default_Long_Long_Integer_Width; Ada.Integer_Text_IO.Default_Width := Default_Integer_Width; end Create_Concatenate; -------------------------------------------------------------------------------------------- -- -- CREATE TransposedConv2D LAYER -- -------------------------------------------------------------------------------------------- procedure Create_TransposedConv2D (MyFile : in File_Type; LayerName : in Unbounded_string; NameInboundNode : in Unbounded_string; KernelSize : in ParamVal2D := (2,2); DilationRate : in ParamVal2D := (4,4); KernelStrides : in ParamVal2D := (2,2); ChannelSize : in out Natural; InboundToken : in Token := 1; OutboundToken : out Token ) is Default_Integer_Width : Integer := Ada.Integer_Text_IO.Default_Width; Default_Long_Long_Integer_Width : Integer := Ada.Long_Long_Integer_Text_IO.Default_Width; Temp : Token; Temp1 : Long_Long_Integer; Temp11 : Long_Long_Integer; Temp2 : Long_Long_Integer; Temp3 : Long_Long_Integer; begin Ada.Long_Long_Integer_Text_IO.Default_Width := 0; Ada.Integer_Text_IO.Default_Width := 0; Temp := Token(Sqrt(Float(InboundToken))); Temp1 := Long_Long_Integer(Sqrt(Float(KernelSize(0)*KernelSize(1)))); Temp11 := KernelSize(0)*KernelSize(1); Temp2 := DilationRate(0)*DilationRate(1); Temp3 := KernelStrides(0); OutboundToken := InboundToken * 2; ChannelSize := ChannelSize/2; Put_Line(MyFile, tab & tab & ""); Put_Line(MyFile, tab & tab & tab & ""); Put_Line(MyFile, tab & tab & tab & tab & "" & NameInboundNode & ""); Put_Line(MyFile, tab & tab & tab & ""); Put_Line(MyFile, tab & tab & tab & ""); Put(MyFile, tab & tab & tab & tab & ""); Put(MyFile, InboundToken); Put_Line(MyFile, ""); Put_Line(MyFile, tab & tab & tab & ""); Put_Line(MyFile, tab & tab & tab & ""); Put(MyFile, tab & tab & tab & tab & ""); Put(MyFile, OutboundToken); Put_Line(MyFile, ""); Put_Line(MyFile, tab & tab & tab & ""); Put(MyFile, tab & tab & tab & ""); Put_Line(MyFile, tab & tab & tab & tab & ""); Put(MyFile, tab & tab & tab & tab & tab & ""); Put(MyFile, DilationRate(0)); Put(MyFile, " "); Put(MyFile, DilationRate(1)); Put_Line(MyFile, ""); Put_Line(MyFile, tab & tab & tab & tab & ""); Put_Line(MyFile, tab & tab & tab & tab & ""); Put(MyFile, tab & tab & tab & tab & tab & ""); Put(MyFile, KernelSize(0)); Put(MyFile, " "); Put(MyFile, KernelSize(1)); Put_Line(MyFile, ""); Put_Line(MyFile, tab & tab & tab & tab & ""); Put_Line(MyFile, tab & tab & tab & tab & ""); Put(MyFile, tab & tab & tab & tab & tab & ""); Put(MyFile, KernelStrides(0)); Put(MyFile, " "); Put(MyFile, KernelStrides(1)); Put_Line(MyFile, ""); Put_Line(MyFile, tab & tab & tab & tab & ""); Put_Line(MyFile, tab & tab & tab & ""); Put_Line(MyFile, tab & tab & ""); Ada.Long_Long_Integer_Text_IO.Default_Width := Default_Long_Long_Integer_Width; Ada.Integer_Text_IO.Default_Width := Default_Integer_Width; end Create_TransposedConv2D; end cnn_pmml;