summaryrefslogtreecommitdiff
path: root/Neurone/FonctionActivation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Neurone/FonctionActivation.cpp')
-rw-r--r--Neurone/FonctionActivation.cpp107
1 files changed, 107 insertions, 0 deletions
diff --git a/Neurone/FonctionActivation.cpp b/Neurone/FonctionActivation.cpp
new file mode 100644
index 0000000..4697ca2
--- /dev/null
+++ b/Neurone/FonctionActivation.cpp
@@ -0,0 +1,107 @@
+#include"./FonctionActivation.h"
+#include <stdlib.h>
+/**
+ * Constructeur par défauts
+ * @method FonctionActivation
+ * @param fonctionActivation Fonction activation à utiliser parmis l'enumération
+ */
+FonctionActivation::FonctionActivation(){
+ this->fonctionActivation = SIGMOID;
+}
+/**
+ * @method FonctionActivation::setFonctionActivation
+ * @param fonctionActivation Fonction activation à utiliser parmis l'enumération
+ */
+void FonctionActivation::setFonctionActivation(EnumFonctionActivation fonctionActivation){
+ this->fonctionActivation = fonctionActivation;
+}
+
+/**
+ * Constructeur
+ * @method FonctionActivation
+ * @param fonctionActivation Fonction activation à utiliser parmis l'enumération
+ */
+FonctionActivation::FonctionActivation(EnumFonctionActivation fonctionActivation){
+ this->fonctionActivation = fonctionActivation;
+}
+
+/**
+ * @method getValeurActivation
+ * @param x Valeur de la variable
+ * @param k Constante de changement
+ * @return Valeur d'activation
+ */
+double FonctionActivation::getValeurActivation(double x, double k) const{
+ switch (fonctionActivation) {
+ case IDENTITY:
+ return x;
+ break;
+ case BINARYSTEP:
+ return x>=0;
+ break;
+ case SIGMOID:
+ return (1/(1+exp(-k*x)));
+ break;
+ case TAN:
+ return ( (exp(x)-exp(-x)) / (exp(x)+exp(-x)));
+ break;
+ case SIN:
+ return sin(x);
+ break;
+ case RELU:
+ return x<0? 0 : x;
+ break;
+ case LRELU:
+ return x<0? 0.01*x : x;
+ break;
+ case PRELU:
+ return x<0? k*x : x;
+ break;
+ case ELU:
+ return x<0? (k*(exp(x)-1)) : x;;
+ break;
+ default:
+ return 0;
+ break;
+ }
+}
+/**
+ * @method getValeurDerive
+ * @param x Valeur de la variable
+ * @param k Constante de changement
+ * @return Valeur de la derivée
+ */
+double FonctionActivation::getValeurDerivee(double x, double k) const{
+ switch (fonctionActivation) {
+ case IDENTITY:
+ return 1;
+ break;
+ case BINARYSTEP:
+ return 0;
+ break;
+ case SIGMOID:
+ return (k*exp(-k*x))* (1/(1+exp(-k*x)*(1+exp(-k*x))));
+ break;
+ case TAN:
+ return 1 - pow(((exp(x)-exp(-x))/(exp(x)+exp(-x))),2);
+ break;
+ case SIN:
+ return cos(x);
+ break;
+ case RELU:
+ return x<0? 0 : 1;
+ break;
+ case LRELU:
+ return x<0? 0.01 : 1;
+ break;
+ case PRELU:
+ return x<0? k : 1;
+ break;
+ case ELU:
+ return x<0? (k*(exp(x)-1)) + k : 1;
+ break;
+ default:
+ return 0;
+ break;
+ }
+}