summaryrefslogtreecommitdiff
path: root/Neurone/NeuroneB.cpp
diff options
context:
space:
mode:
authorGaspard Coulet <gaspard.coulet@mines-ales.org>2021-04-28 23:12:36 +0200
committerGaspard Coulet <gaspard.coulet@mines-ales.org>2021-04-28 23:12:36 +0200
commitb4c345e6a5fa929ba20eac19183b9c777055f52d (patch)
tree23a0232f2526c5ab7f53391609a8a0a5960865f0 /Neurone/NeuroneB.cpp
Initial commit
Diffstat (limited to 'Neurone/NeuroneB.cpp')
-rw-r--r--Neurone/NeuroneB.cpp85
1 files changed, 85 insertions, 0 deletions
diff --git a/Neurone/NeuroneB.cpp b/Neurone/NeuroneB.cpp
new file mode 100644
index 0000000..4556f8e
--- /dev/null
+++ b/Neurone/NeuroneB.cpp
@@ -0,0 +1,85 @@
+#include"./NeuroneB.h"
+/**
+ * Constructeur du Neurone avec biais
+ * @method NeuroneB::NeuroneB
+ * @param taille Taille du neurone
+ * @param x Vecteur de poids
+ * @param biais_w Valeur du biais
+ */
+NeuroneB::NeuroneB(int taille,std::vector<double> * x, double biais_w){
+ n = taille;
+ w = x;
+ w->push_back(biais_w);
+}
+
+/**
+ * Constructeur du Neurone avec biais
+ * @method NeuroneB::NeuroneB
+ * @param taille Taille du neurone
+ */
+NeuroneB::NeuroneB(int taille,FonctionActivation::EnumFonctionActivation fct) {
+ n = taille;
+ fonctionActivation.setFonctionActivation(fct);
+ aleaWeights();
+}
+
+/**
+ * Affichage des poids
+ * @method NeuroneB::printWeight
+ */
+void NeuroneB::printWeight(){
+ Neurone::printWeight();
+ std::cout << "biais = " << (*w)[n] << std::endl;
+}
+
+/**
+ * Génération aléatoire des poids
+ * @method NeuroneB::aleaWeights
+ */
+void NeuroneB::aleaWeights(){
+ w = new std::vector<double> (n,0.8);
+ std::default_random_engine generator(std::random_device{}());
+ std::normal_distribution<double> distribution(0,1);
+ for (int i=0; i<n; i++) {
+ (*w)[i] = distribution(generator);
+ }
+ w->push_back(distribution(generator));
+}
+
+/**
+ * Méthode d'apprentissage (cf Neurone::fw_sum, cf Neurone::fw_activate, cf Neurone::derive_activate)
+ * @method Neurone::learn
+ * @param x Vecteur de poids
+ * @param o Valeur attendue
+ * @param k Valeur du biais
+ * @param mu Taux d'apprentissage | Learning rate
+ */
+void NeuroneB::learn(std::vector<double> x,double o,double k, double mu){
+ double sum = fw_sum(x);
+ double res = fw_activate(sum,k);
+ double derive = derive_activate(sum,k);
+ for(int i=0; i<n; i++){
+ (*w)[i]= (*w)[i]- mu * (x[i]*derive*((o-res)*(-2)));
+ }
+ (*w)[n] = (*w)[n]- mu * (1*derive*((o-res)*(-2)));
+}
+
+/**
+ * Méthode de somme du vecteur de poids
+ * @method NeuroneB::fw_sum
+ * @param x Vecteur de poids
+ * @return Somme des poids
+ */
+double NeuroneB::fw_sum(std::vector<double> x)const{
+ double res = Neurone::fw_sum(x);
+ res += (*w)[n];
+ return res;
+}
+
+/**
+ * @method NeuroneB::getNbPoids
+ * @return Nombre de poids
+ */
+int NeuroneB::getNbPoids(){
+ return n+1;
+}