[31m-- Author      : Manuel De Girardi[m
[31m-- Date        : 2010/12/9[m
[31m-- Version     : 0.0.0pre-alpha_010[m
[31m-- Description : artificial neural network generator for MidiSurf[m
[31m-------------------------------------------------------------------------------[m
[01;34mwith[m Ada[31m.[mText_Io[31m;[m                       [01;34muse[m Ada[31m.[mText_Io[31m;[m
[01;34mwith[m Ada[31m.[mStrings[31m,[m Ada[31m.[mStrings[31m.[mFixed[31m;[m
[01;34muse[m Ada[31m.[mStrings[31m,[m Ada[31m.[mStrings[31m.[mFixed[31m;[m
[01;34mwith[m Calendar[31m;[m                          [01;34muse[m Calendar[31m;[m
[01;34mwith[m Calendar[31m.[mFormatting[31m;[m
[01;34mwith[m Pragmarc[31m.[mAnsi_Tty_Control[31m;[m         [01;34muse[m Pragmarc[31m.[mAnsi_Tty_Control[31m;[m
[01;34mwith[m Libsens[31m.[mNeural_Chord[31m.[mIO[31m;[m
[01;34mpackage[m [01;34mbody[m Libsens[31m.[mNeural_Chord[31m.[mTrainner [01;34mis[m
    
   
   [01;34mprocedure[m [01;30mTrain_From_File[m[31m([mFilename [31m:[m [01;34min[m [32mString[m[31m;[m Reuse [31m:[m [01;34min[m [32mBoolean[m[31m;[m Converged [31m:[m [01;34min[m Real[31m;[m Max_Epoch [31m:[m [01;34min[m Positive[31m)[m [01;34mis[m
   [01;34mbegin[m
      
      
      
      Register_Io[31m.[m[01;30mOpen[m[31m([mReg_File[31m,[m Register_Io[31m.[mIn_File[31m,[m filename [31m&[m [31m".bin"[m[31m);[m
      [31m----------------------------------------------------------------[m
      Data_Length [31m:=[m [01;30mnatural[m[31m([mRegister_Io[31m.[m[01;30mSize[m[31m([mReg_File[31m))/[m[35m2[m[31m;[m
      [01;34mdeclare[m
	 Date [31m:[m Time [31m:=[m Clock[31m;[m
	 Heure[31m,[m Minute[31m,[m Seconde [31m:[m Natural [31m:=[m [35m0[m[31m;[m
	 Reste [31m:[m [32mDuration[m [31m:=[m [35m0.0[m[31m;[m
	 [01;34mprocedure[m [01;30mGet_Input[m [31m([mPattern [31m:[m [01;34min[m Positive[31m;[m
			      Input [31m:[m [01;34mout[m Node_Set[31m;[m
			      Desired [31m:[m [01;34mout[m Node_Set[31m)[m [01;34mis[m

	 [01;34mbegin[m

	    Register_Io[31m.[m[01;30mRead[m[31m([mReg_File[31m,[m [01;30mT_Register[m[31m([mInput[31m),[m Register_Io[31m.[m[01;30mCount[m[31m([mPattern[31m*[m[35m2[m[31m-[m[35m1[m[31m));[m
	    Register_Io[31m.[m[01;30mRead[m[31m([mReg_File[31m,[m [01;30mT_Register[m[31m([mdesired[31m),[m Register_Io[31m.[m[01;30mCount[m[31m([mPattern[31m*[m[35m2[m[31m));[m
	 [01;34mend[m Get_Input[31m;[m


	 [01;34mpackage[m Mutan_REM_NN_Trai [01;34mis[m [01;34mnew[m [01;30mREM_NN[m[31m([mNum_Input_Nodes [31m=>[m T_Register'Length[31m,[m
                                                 Num_Hidden_Nodes [31m=>[m T_Register'Length[31m/[m[35m7[m[31m,[m
                                                 Num_Output_Nodes [31m=>[m T_Register'Length[31m,[m
                                                 New_Random_Weights [31m=>[m [01;34mnot[m reuse[31m,[m
                                                 Weight_File_Name [31m=>[m Filename [31m&[m [31m".wgt"[m[31m,[m
                                                 Input_To_Output_Connections [31m=>[m True[31m,[m
                                                 Num_Patterns [31m=>[m Data_Length[31m,[m
                                                 Get_Input [31m=>[m Get_Input[31m);[m
	 Response [31m:[m Mutan_REM_NN_Trai[31m.[mOutput_Set [31m:=[m [31m([m[01;34mothers[m [31m=>[m [35m0.0[m[31m);[m
	 Desired_Output [31m:[m [01;34marray[m [31m([m[35m1[m[31m..[mData_Length[31m)[m [01;34mof[m Mutan_REM_NN_trai[31m.[mOutput_Set[31m;[m
	 Date_string   [31m:[m [32mString[m[31m([m[35m1[m[31m..[m[35m80[m[31m)[m [31m:=[m [31m([m[01;34mothers[m [31m=>[m [32mCharacter[m'[01;30mVal[m[31m([m[35m32[m[31m));[m
	 Banner [31m:[m [32mString[m[31m([m[35m1[m[31m..[m[35m80[m[31m)[m [31m:=[m [31m([m[01;34mothers[m [31m=>[m [32mCharacter[m'[01;30mVal[m[31m([m[35m32[m[31m));[m
	 RMS_Error [31m:[m Real [31m:=[m [35m10.0[m[31m;[m

	 Error     [31m:[m Real [31m:=[m [35m0.0[m[31m;[m

	 
	 Epoch [31m:[m Natural [31m:=[m [35m0[m[31m;[m
	 Index [31m:[m Register_io[31m.[mCount [31m:=[m [35m1[m[31m;[m
      [01;34mbegin[m
         [01;34mfor[m I [01;34min[m [35m1[m[31m..[mDesired_Output'Length [01;34mloop[m
            Register_io[31m.[m[01;30mread[m[31m([mReg_file[31m,[m [01;30mT_Register[m[31m([m[01;30mDesired_Output[m[31m([mI[31m)),[m Register_Io[31m.[m[01;30mCount[m[31m([mRegister_Io[31m.[m[31m"+"[m[31m([mIndex[31m,[m [35m1[m[31m)));[m
            Index [31m:=[m Register_Io[31m.[m[31m"+"[m[31m([mIndex[31m,[m [35m2[m[31m);[m
         [01;34mend[m [01;34mloop[m[31m;[m
         [01;34mloop[m
            [01;30mMove[m[31m(([m[35m80[m [31m*[m [32mCharacter[m'[01;30mVal[m[31m([m[35m32[m[31m)),[m Date_string[31m,[m Ada[31m.[mStrings[31m.[mError[31m,[m Center[31m);[m
            [01;30mMove[m[31m([mFormatting[31m.[m[01;30mImage[m[31m([mClock[31m),[m Date_string[31m,[m Ada[31m.[mStrings[31m.[mError[31m,[m Center[31m);[m
            [01;30mPut[m [31m([mClear_Screen[31m);[m
            [01;30mMove[m[31m([m[31m"Welcome to Ultrason arpeggiator Network Generator."[m [31m,[m Banner[31m,[m Ada[31m.[mStrings[31m.[mError[31m,[m Center[31m);[m
            [01;30mPut_line[m[31m([mBold_mode [31m&[m Banner [31m&[m Normal_mode[31m);[m
            [01;30mPut_Line[m[31m([mDate_string[31m);[m
            New_Line[31m;[m

            [01;30mPut_Line[m[31m([m[31m"Training artificial neural network "[m [31m&[m [31m" length="[m [31m&[m [32mInteger[m'[01;30mImage[m[31m([mData_Length[31m));[m
            [01;30mPut[m [31m([m[31m"Epoch"[m[31m);[m
            [01;30mput[m [31m([m[32mInteger[m'[01;30mImage[m [31m([mEpoch[31m)[m [31m);[m
            [01;30mPut[m[31m([m[31m" => RMS_Error: "[m[31m);[m

            Real_Io[31m.[m[01;30mPut[m[31m([mRMS_Error[31m);[m
            [01;30mPut_line[m[31m([m[32mInteger[m'[01;30mImage[m[31m([m[32mInteger[m[31m((([mconverged[31m)/[mRMS_Error[31m)*[m[35m100.0[m[31m))[m [31m&[m
		       [31m'%'[m [31m&[m
		       [32mInteger[m'[01;30mImage[m[31m([mHeure[31m)[m [31m&[m
		       [31m':'[m [31m&[m
		       [32mInteger[m'[01;30mImage[m[31m([mMinute[31m)[m [31m&[m
		       [31m':'[m [31m&[m
		       [32mInteger[m'[01;30mImage[m[31m([mSeconde[31m)[m [31m&[m
		       [31m':'[m [31m&[m
		       [32mduration[m'[01;30mImage[m[31m([mReste[31m)[m [31m);[m
            [01;30mSplit[m[31m([mClock[31m,[m Heure[31m,[m Minute[31m,[m Seconde[31m,[m reste[31m);[m
            [01;34mif[m [32minteger[m[31m(((([m[35m80.0[m[31m/[mRMS_Error[31m)/[m[35m80.0[m[31m)/([m[35m0.1[m[31m/[mconverged[31m))*[m[35m8.0[m[31m)[m [31m>[m [35m0[m [01;34mthen[m
               [01;30mPut[m[31m([mReverse_Video [31m&[m
		     [32mInteger[m[31m(((([m[35m80.0[m[31m/[mRMS_Error[31m)/[m[35m80.0[m[31m)/([m[35m0.1[m[31m/[mconverged[31m))*[m[35m8.0[m[31m)[m [31m*[m [31m' '[m [31m&[m
		     Normal_Mode[31m);[m
            [01;34mend[m [01;34mif[m[31m;[m
	    
            RMS_Error [31m:=[m [35m0.0[m[31m;[m
        All_Patterns [31m:[m
            [01;34mfor[m Pattern [01;34min[m [35m1[m[31m..[mData_Length [01;34mLoop[m
               Mutan_REM_NN_Trai[31m.[mTrain[31m;[m
               Mutan_REM_NN_Trai[31m.[m[01;30mRespond[m [31m([mPattern[31m,[m Response[31m);[m
               [01;34mfor[m I [01;34min[m Response'[01;34mRange[m [01;34mloop[m
                  Error [31m:=[m Error [31m+[m [31m([m[01;30mDesired_Output[m[31m([mPattern[31m)([mi[31m)[m [31m-[m   [01;30mResponse[m[31m([mi[31m)[m [31m);[m
               [01;34mend[m [01;34mloop[m[31m;[m
               RMS_Error [31m:=[m RMS_Error [31m+[m [31m(([mError[31m/[m[01;30mReal[m[31m([mResponse'Length[31m))[m [31m**[m [35m2[m[31m);[m
               Error [31m:=[m [35m0.0[m[31m;[m
            [01;34mend[m [01;34mloop[m All_Patterns[31m;[m
            RMS_Error [31m:=[m Real_Math[31m.[m[01;30mSqrt[m[31m([mRMS_Error [31m/[m [01;30mReal[m [31m([mData_length[31m))[m [31m;[m
            [01;34mif[m [31m([mRMS_Error [31m<=[m Converged[31m)[m [01;34mor[m
              [31m([mEpoch [31m>=[m Max_Epoch[31m)[m [01;34mthen[m
               [01;34mexit[m[31m;[m
            [01;34mend[m [01;34mif[m[31m;[m

            Epoch [31m:=[m Epoch [31m+[m [35m1[m[31m;[m
         [01;34mend[m [01;34mloop[m[31m;[m
         Mutan_REM_NN_trai[31m.[mSave_Weights[31m;[m
      [01;34mend[m[31m;[m
      Register_Io[31m.[m[01;30mClose[m[31m([mReg_File[31m);[m
      [31m----------------------------------------------------------------[m
   [01;34mend[m Train_From_File[31m;[m


[01;34mend[m Libsens[31m.[mNeural_Chord[31m.[mTrainner[31m;[m
