ArrayToFP16

float veya double türündeki bir diziyi istenilen formatta ushort türünde bir diziye kopyalar.

bool   ArrayToFP16(
   const ushort&        dst_array[],        // hedef dizi
   const float&         src_array[],        // kaynak dizi
   ENUM_FLOAT16_FORMAT  fmt                 // format
   );

Double türü için aşırı yükleme

bool   ArrayToFP16(
   const ushort&        dst_array[],        // hedef dizi
   const double&        src_array[],        // kaynak dizi
   ENUM_FLOAT16_FORMAT  fmt                 // format
   );

Parametreler

dst_array[]

[out]  ushort türünde alıcı dizi.

src_array[]

[in]  float veya double türünde kaynak dizi.

fmt

[in] ENUM_FLOAT16_FORMAT numaralandırmasından kopyalama formatı.

 

Geri dönüş değeri

Başarılı ise true, aksi takdirde false geri döndürür.

Not

FLOAT16 ve BFLOAT16 formatları ENUM_FLOAT16_FORMAT numaralandırmasında tanımlanır ve MQL5'te yalnızca ONNX modelleriyle çalışmalar için kullanılır.

Fonksiyon, float veya double türündeki girdi parametrelerini FLOAT16 ve BFLOAT16 türüne dönüştürür. Bu girdi parametreleri daha sonra OnnxRun fonksiyonunda kullanılır.

Half-precision float olarak da bilinen FLOAT16, ondalıklı sayıları temsil etmek için 16 bit kullanır. Bu format, doğruluk ve hesaplama verimliliği arasında bir denge sağlar. FLOAT16, büyük veri kümelerinin yüksek performansla işlenmesini gerektiren derin öğrenme algoritmalarında ve sinir ağlarında yaygın olarak kullanılmaktadır. Bu format, özellikle GPU'larda derin sinir ağlarını eğitirken önemli olan sayıların boyutunu azaltarak hesaplama işlemlerini hızlandırır.

BFLOAT16 (veya brain floating point 16) da 16 bit kullanır ancak format temsiline yaklaşım açısından FLOAT16'dan farklıdır. Bu formatta, 8 bit üssü temsil etmek için ayrılırken, kalan 7 bit mantisi temsil etmek için kullanılır. Bu format, özellikle Google'ın tensör işleme biriminde (Tensor Processing Unit, TPU) olmak üzere derin öğrenme ve yapay zekada kullanılmak üzere geliştirilmiştir. BFLOAT16, sinir ağı eğitiminde mükemmel performans gösterir ve hesaplamaları etkili bir şekilde hızlandırabilir.

 

Örnek: makaleden fonksiyon - ONNX modelleriyle float16 ve float8 formatlarında çalışma

//+------------------------------------------------------------------+
//| RunCastFloat16ToDouble                                           |
//+------------------------------------------------------------------+
bool RunCastFloat16ToDouble(long model_handle)
  {
   PrintFormat("test=%s",__FUNCTION__);
   double test_data[12]= {1,2,3,4,5,6,7,8,9,10,11,12};
   ushort data_uint16[12];
   if(!ArrayToFP16(data_uint16,test_data,FLOAT_FP16))
     {
      Print("error in ArrayToFP16. error code=",GetLastError());
      return(false);
     }
   Print("test array:");
   ArrayPrint(test_data);
   Print("ArrayToFP16:");
   ArrayPrint(data_uint16);
   U<ushortinput_float16_values[3*4];
   U<doubleoutput_double_values[3*4];
   float test_data_float[];
   if(!ArrayFromFP16(test_data_float,data_uint16,FLOAT_FP16))
     {
      Print("error in ArrayFromFP16. error code=",GetLastError());
      return(false);
     }
   for(int i=0i<12i++)
     {
      input_float16_values[i].value=data_uint16[i];
      PrintFormat("%d input value =%f  Hex float16 = %s  ushort value=%d",i,test_data_float[i],ArrayToString(input_float16_values[i].uc),input_float16_values[i].value);
     }
   Print("ONNX input array:");
   ArrayPrint(input_float16_values);
   bool res=OnnxRun(model_handle,ONNX_NO_CONVERSION,input_float16_values,output_double_values);
   if(!res)
     {
      PrintFormat("error in OnnxRun. error code=%d",GetLastError());
      return(false);
     }
   Print("ONNX output array:");
   ArrayPrint(output_double_values);
//---
   double sum_error=0.0;
   for(int i=0i<12i++)
     {
      double delta=test_data[i]-output_double_values[i].value;
      sum_error+=MathAbs(delta);
      PrintFormat("%d output double %f = %s  difference=%f",i,output_double_values[i].value,ArrayToString(output_double_values[i].uc),delta);
     }
//---
   PrintFormat("test=%s   sum_error=%f",__FUNCTION__,sum_error);
//---
   return(true);
  }

Ayrıca bakınız

ArrayFromFP16, ArrayCopy