Activation

Calcula los valores de la función de activación y los escribe en el vector/matriz trasmitido.

bool vector::Activation(
  vector&                   vect_out,      // vector para obtener los valores
  ENUM_ACTIVATION_FUNCTION  activation,    // función de activación
   ...                                     // parámetros adicionales
   );
 
 
bool matrix::Activation(
  matrix&                   matrix_out,    // matriz para obtener los valores
  ENUM_ACTIVATION_FUNCTION  activation     // función de activación
   );
 
 
bool matrix::Activation(
  matrix&                   matrix_out,    // matriz para obtener los valores
  ENUM_ACTIVATION_FUNCTION  activation,    // función de activación
  ENUM_MATRIX_AXIS          axis,          // eje
   ...                                     // parámetros adicionales
   );

Parámetros

vect_out/matrix_out

[out]  Vector o matriz para obtener los valores calculados de la función de activación.

activation

[in]  Función de activación de la enumeración ENUM_ACTIVATION_FUNCTION.

axis

[in]  Valor de la enumeración ENUM_MATRIX_AXIS (AXIS_HORZ – eje horizontal, AXIS_VERT – eje vertical).

...

[in]  Parámetros adicionales necesarios para algunas funciones de activación. Si no se especifica ningún parámetro, se utilizarán los valores por defecto.

Valor retornado

Retorna true en el caso de éxito, de lo contrario, false.

Parámetros adicionales

Algunas funciones de activación adoptan parámetros adicionales. Si no se especifica ningún parámetro, se utilizarán los valores por defecto

   AF_ELU  (Exponential Linear Unit)  
     double alpha=1.0
   
   Función de activación: if(x>=0f(x) = x
                      else f(x) = alpha * (exp(x)-1)
   
   
   AF_LINEAR   
     double alpha=1.0
     double beta=0.0
   
   Función de activación: f(x) = alpha*x + beta
   
   
   AF_LRELU   (Leaky REctified Linear Unit)   
     double alpha=0.3
   
   Función de activación: 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
   
   Función de activación: 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
   
   Función de activación: f(x) = x / (1+exp(-x*beta))
   
   
   AF_TRELU   (Thresholded REctified Linear Unit)   
     double theta=1.0
   
   Función de activación: if(x>thetaf(x) = x
                      else f(x) = 0
   
   
   AF_PRELU   (Parametric REctified Linear Unit)   
     double alpha[] - learned array of coeefficients
   
   Función de activación: if(x[i]>=0f(x)[i] = x[i]
                      else f(x)[i] = alpha[i] * x[i]

Observación

En las redes neuronales artificiales, la función de activación de la neurona define la señal de salida, que viene determinada por la señal de entrada o el conjunto de señales de entrada. La elección de la función de activación influye sustancialmente en las capacidades y el rendimiento de la red neuronal. Las diferentes partes del modelo (capas) pueden utilizar funciones de activación distintas.

Ejemplos de uso de los parámetros adicionales:

   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);
 
/*  Resultados
   [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]
*/