Activation

Calcule les valeurs de la fonction d'activation et les écrit dans le vecteur (ou la matrice) passé.

bool vector::Activation(
  vector&                   vect_out,      // vecteur pour obtenir les valeurs
  ENUM_ACTIVATION_FUNCTION  activation,    // fonction d'activation
   ...                                     // paramètres supplémentaires
   );
 
 
bool matrix::Activation(
  matrix&                   matrix_out,    // matrice pour obtenir les valeurs
  ENUM_ACTIVATION_FUNCTION  activation     // fonction d'activation
   );
 
 
bool matrix::Activation(
  matrix&                   matrix_out,    // matrice pour obtenir les valeurs
  ENUM_ACTIVATION_FUNCTION  activation,    // fonction d'activation
  ENUM_MATRIX_AXIS          axis,          // axe
   ...                                     // paramètres supplémentaires
   );

Paramètres

vect_out/matrix_out

[out]  Vecteur ou matrice pour récupérer les valeurs calculées de la fonction d'activation.

activation

[in]  Fonction d'activation de l'énumération ENUM_ACTIVATION_FUNCTION.

axis

[in] Valeur de l'énumération ENUM_MATRIX_AXIS (AXIS_HORZ — axe horizontal, AXIS_VERT — axe vertical).

...

[in]  Paramètres supplémentaires requis pour certaines fonctions d'activation. Si aucun paramètre n'est spécifié, les valeurs par défaut sont utilisées.

Valeur de Retour

Renvoie true en cas de succès, false sinon.

Paramètres Supplémentaires

Certaines fonctions d'activation acceptent des paramètres supplémentaires. Si aucun paramètre n'est spécifié, les valeurs par défaut sont utilisées.

   AF_ELU  (Exponential Linear Unit)  
     double alpha=1.0
   
   Fonction d'activation : if(x>=0f(x) = x
                      else f(x) = alpha * (exp(x)-1)
   
   
   AF_LINEAR   
     double alpha=1.0
     double beta=0.0
   
   Fonction d'activation : f(x) = alpha*x + beta
   
   
   AF_LRELU   (Leaky REctified Linear Unit)   
     double alpha=0.3
   
   Fonction d'activation : if(x>=0f(x)=x
                      else f(x) = alpha*x
   
                        
   AF_RELU  (REctified Linear Unit)   
     double alpha=0.0
     double max_value=0.0
     double treshold=0.0
   
   Fonction d'activation : if(alpha==0f(x) = max(x,0)
                      else if(x>max_valuef(x) = x
                      else f(x) = alpha*(x - treshold)
   
   
   AF_SWISH   
     double beta=1.0
   
   Fonction d'activation : f(x) = x / (1+exp(-x*beta))
   
   
   AF_TRELU   (Thresholded REctified Linear Unit)   
     double theta=1.0
   
   Fonction d'activation : if(x>thetaf(x) = x
                      else f(x) = 0
   
   
   AF_PRELU   (Parametric REctified Linear Unit)   
     double alpha[] - tableau appris de coefficients
   
   Fonction d'activation : if(x[i]>=0f(x)[i] = x[i]
                      else f(x)[i] = alpha[i] * x[i]

Note

Dans les réseaux de neurones artificiels, la fonction d'activation d'un neurone détermine le signal de sortie, défini par un signal d'entrée ou un ensemble de signaux d'entrée. La sélection de la fonction d'activation a un impact important sur les performances du réseau de neurones. Différentes parties du modèle (couches) peuvent utiliser différentes fonctions d'activation.

Exemples d'utilisation de paramètres supplémentaires :

   vector x={0.10.40.92.0, -5.00.0, -0.1};
   vector y;
 
   x.Activation(y,AF_ELU);
   Print(y);
   x.Activation(y,AF_ELU,2.0);
   Print(y);
 
   Print("");
   x.Activation(y,AF_LINEAR);
   Print(y);
   x.Activation(y,AF_LINEAR,2.0);
   Print(y);
   x.Activation(y,AF_LINEAR,2.0,5.0);
   Print(y);
 
   Print("");
   x.Activation(y,AF_LRELU);
   Print(y);
   x.Activation(y,AF_LRELU,1.0);
   Print(y);
   x.Activation(y,AF_LRELU,0.1);
   Print(y);
  
   Print("");
   x.Activation(y,AF_RELU);
   Print(y);
   x.Activation(y,AF_RELU,2.0,0.5);
   Print(y);
   x.Activation(y,AF_RELU,2.0,0.5,1.0);
   Print(y);
 
   Print("");
   x.Activation(y,AF_SWISH);
   Print(y);
   x.Activation(y,AF_SWISH,2.0);
   Print(y);
 
   Print("");
   x.Activation(y,AF_TRELU);
   Print(y);
   x.Activation(y,AF_TRELU,0.3);
   Print(y);
 
   Print("");
   vector a=vector::Full(x.Size(),2.0);
   x.Activation(y,AF_PRELU,a);
   Print(y);
 
/*  Résultats
   [0.1,0.4,0.9,2,-0.993262053000915,0,-0.095162581964040]
   [0.1,0.4,0.9,2,-1.986524106001829,0,-0.190325163928081]
   
   [0.1,0.4,0.9,2,-5,0,-0.1]
   [0.2,0.8,1.8,4,-10,0,-0.2]
   [5.2,5.8,6.8,9,-5,5,4.8]
   
   [0.1,0.4,0.9,2,-1.5,0,-0.03]
   [0.1,0.4,0.9,2,-5,0,-0.1]
   [0.1,0.4,0.9,2,-0.5,0,-0.01]
   
   [0.1,0.4,0.9,2,0,0,0]
   [0.2,0.8,0.9,2,-10,0,-0.2]
   [-1.8,-1.2,0.9,2,-12,-2,-2.2]
   
   [0.052497918747894,0.239475064044981,0.6398545523625035,1.761594155955765,-0.03346425462142428,0,-0.047502081252106]
   [0.054983399731247,0.275989792451045,0.7723340415895611,1.964027580075817,-0.00022698934351217,0,-0.045016600268752]
   
   [0,0,0,2,0,0,0]
   [0,0.4,0.9,2,0,0,0]
   
   [0.1,0.4,0.9,2,-10,0,-0.2]
*/