Original_NNB/MQL5/Include/NeuroNetworksBook/realization/arraylayers.mqh

196 lines
15 KiB
MQL5
Raw Permalink Normal View History

2025-05-30 16:15:14 +02:00
<EFBFBD><EFBFBD>//+------------------------------------------------------------------+
//| ArrayLayers.mqh |
//| Copyright 2021, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link "https://www.mql5.com"
//+------------------------------------------------------------------+
//| >AB0=BK :;0AA0 |
//+------------------------------------------------------------------+
#define ArrayLayers CArrayLayers
//+------------------------------------------------------------------+
//| >4:;NG05< :;0AAK =59@>==KE A;>Q2 |
//+------------------------------------------------------------------+
#include <Arrays\ArrayObj.mqh>
#include "neuronconv.mqh"
#include "neuronlstm.mqh"
#include "neuronattention.mqh"
#include "neuronmhattention.mqh"
#include "neurondropout.mqh"
#include "neuronbatchnorm.mqh"
//+------------------------------------------------------------------+
//| Class CArrayLayers |
//| 07=0G5=85: ;0AA 48=0<8G5A:>3> <0AA820 :>;;5:F88 =59@>==KE A;>Q2|
//+------------------------------------------------------------------
class CArrayLayers : public CArrayObj
{
protected:
CMyOpenCL *m_cOpenCL;
int m_iFileHandle;
public:
CArrayLayers(int file_handle = INVALID_HANDLE)
{ m_cOpenCL = NULL; m_iFileHandle = file_handle; }
~CArrayLayers(void) {};
//---
virtual bool SetOpencl(CMyOpenCL *opencl);
virtual bool Load(const int file_handle);
//--- method of creating an element of array
virtual bool CreateElement(const int index);
virtual bool CreateElement(const int index, CLayerDescription *description);
//--- method of identifying the object
virtual int Type(void) const { return(defArrayLayers); }
};
//+------------------------------------------------------------------+
//| >45;L GPT 8A?>;L7C5B 40==K9 :;0AA 4;O >@30=870F88 2=CB@5==8E |
//| =59@>=KE A;>Q2. >MB><C 40==K9 A;>9 ?>4:;NG05< ?>A;5 >1JO2;5=8O |
//| :;0AA0 |
//+------------------------------------------------------------------+
#include "neurongpt.mqh"
//+------------------------------------------------------------------+
//| 5B>4 A>740=8O M;5<5=B0 48=0<8G5A:>3> <0AA820 |
//+------------------------------------------------------------------+
bool CArrayLayers::CreateElement(const int index)
{
//--- ;>: ?@>25@:8 8AE>4=KE 40==KE
if(index < 0 || m_iFileHandle == INVALID_HANDLE)
return false;
//--- 575@28@>20=885 M;5<5=B0 <0AA820 ?>4 =>2K9 >1J5:B
if(!Reserve(index + 1))
return false;
//--- !G8BK205< 87 D09;0 B8? =C6=>3> >1J5:B0 8 A>740Q< A>>B25BA2CNI89 =59@>==K9 A;>9
CNeuronBase *temp = NULL;
int type = FileReadInteger(m_iFileHandle);
switch(type)
{
case defNeuronBase:
temp = new CNeuronBase();
break;
case defNeuronConv:
temp = new CNeuronConv();
break;
case defNeuronProof:
temp = new CNeuronProof();
break;
case defNeuronLSTM:
temp = new CNeuronLSTM();
break;
case defNeuronAttention:
temp = new CNeuronAttention();
break;
case defNeuronMHAttention:
temp = new CNeuronMHAttention();
break;
case defNeuronGPT:
temp = new CNeuronGPT();
break;
case defNeuronDropout:
temp = new CNeuronDropout();
break;
case defNeuronBatchNorm:
temp = new CNeuronBatchNorm();
break;
default:
return false;
}
//--- >=B@>;L A>740=8O =>2>3> >1J5:B0
if(CheckPointer(temp) == POINTER_INVALID)
return false;
//--- >102;O5< C:070B5;L =0 A>740==K9 >1J5:B 2 <0AA82
if(CheckPointer(m_data[index]) != POINTER_INVALID)
delete m_data[index];
temp.SetOpenCL(m_cOpenCL);
m_data[index] = temp;
//---
return true;
}
//+------------------------------------------------------------------+
//| 5B>4 A>740=8O M;5<5=B0 48=0<8G5A:>3> <0AA820 |
//+------------------------------------------------------------------+
bool CArrayLayers::CreateElement(const int index, CLayerDescription *description)
{
//--- ;>: ?@>25@:8 8AE>4=KE 40==KE
if(index < 0 || CheckPointer(description) == POINTER_INVALID)
return false;
//--- 575@28@>20=885 M;5<5=B0 <0AA820 ?>4 =>2K9 >1J5:B
if(!Reserve(index + 1))
return false;
//--- !>740Q< A>>B25BA2CNI89 =59@>==K9 A;>9
CNeuronBase *temp = NULL;
switch(description.type)
{
case defNeuronBase:
temp = new CNeuronBase();
break;
case defNeuronConv:
temp = new CNeuronConv();
break;
case defNeuronProof:
temp = new CNeuronProof();
break;
case defNeuronLSTM:
temp = new CNeuronLSTM();
break;
case defNeuronAttention:
temp = new CNeuronAttention();
break;
case defNeuronMHAttention:
temp = new CNeuronMHAttention();
break;
case defNeuronGPT:
temp = new CNeuronGPT();
break;
case defNeuronDropout:
temp = new CNeuronDropout();
break;
case defNeuronBatchNorm:
temp = new CNeuronBatchNorm();
break;
default:
return false;
}
//--- >=B@>;L A>740=8O =>2>3> >1J5:B0
if(CheckPointer(temp) == POINTER_INVALID)
return false;
//--- >102;O5< C:070B5;L =0 A>740==K9 >1J5:B 2 <0AA82
if(!temp.Init(description))
return false;
if(CheckPointer(m_data[index]) != POINTER_INVALID)
delete m_data[index];
temp.SetOpenCL(m_cOpenCL);
m_data[index] = temp;
m_data_total = fmax(m_data_total, index + 1);
//---
return true;
}
//+------------------------------------------------------------------+
//| 5B>4 ?5@540G8 C:070B5;O =0 :>=B5:AB OpenCL |
//+------------------------------------------------------------------+
bool CArrayLayers::SetOpencl(CMyOpenCL *opencl)
{
//--- ;>: ?@>25@:8 8AE>4=KE 40==KE
if(CheckPointer(m_cOpenCL) != POINTER_INVALID)
delete m_cOpenCL;
m_cOpenCL = opencl;
//--- 5@540G0 C:070B5;O 2> 2A5 M;5<5=BK <0AA820
for(int i = 0; i < m_data_total; i++)
{
if(CheckPointer(m_data[i]) == POINTER_INVALID)
return false;
CNeuronBase *temp = m_data[i];
if(!temp.SetOpenCL(m_cOpenCL))
return false;
}
//---
return(CheckPointer(m_cOpenCL) != POINTER_INVALID);
}
//+------------------------------------------------------------------+
//| 5B>4 AG8BK20=8O 48=0<8G5A:>3> <0AA820 87 D09;0 |
//+------------------------------------------------------------------+
bool CArrayLayers::Load(const int file_handle)
{
m_iFileHandle = file_handle;
return CArrayObj::Load(file_handle);
}
//+------------------------------------------------------------------+