-
Notifications
You must be signed in to change notification settings - Fork 1
/
Neuronio.cpp
106 lines (77 loc) · 2.72 KB
/
Neuronio.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include "Neuronio.h"
Neuronio::Neuronio()
{ //inicializa BIAS
this->bias = -1.0;
//inicializa entradas e pesos
for (int i = 0; i < QTD_DE_ENTRADAS; i++) {
this->entradas[i] = 1.0;
this->pesos[i] = 1.0;
this->deltas[i] = 0.0;
}
}
Neuronio::~Neuronio()
{
}
void Neuronio::imprime() {
//Imprime Entradas
cout << " E: ";
for (int i = 0; i < QTD_DE_ENTRADAS; i++)
cout << (int)this->entradas[i];
//Imprime Pesos
cout << " P:";
for (int i = 0; i < QTD_DE_ENTRADAS; i++)
cout << " " << this->pesos[i];
cout << " C: " << (int)this->classificacao;
cout << " CI: " << (int)this->classificacaoIdeal;
cout << " S: " << this->saida;
cout << " Erro: " << this->erroLocal;
//Imprime Deltas
cout << " D:";
for (int i = 0; i < QTD_DE_ENTRADAS; i++)
cout << " " << this->deltas[i];
cout << endl;
}
//junta os números do vetor em um numero para encontrar a classificação ideal
//sem intermedio do neuronio, para fins de treinamento assistido
void Neuronio::classificaIdeal() {
double valor = 0;
//Pega as entradas e une elas em um double (transforma um array de double em um double)
for(int i = 0; i < QTD_DE_ENTRADAS; i++)
valor = valor * 10.0 + entradas[i];
//Compara o numero com o RU para gerar a classificação correta. Serve apenas para a aprendizagem supervisionada.
if (valor >= RU_ALUNO)
this->classificacaoIdeal = 1;
else
this->classificacaoIdeal = -1;
}
//Seta as entradas recebendo um vetor como argumento
void Neuronio::setEntradas(double e[]) {
for (int i = 0; i < QTD_DE_ENTRADAS; i++)
this->entradas[i] = e[i];
}
//Seta os pedo recebendo um vetor como argumento
void Neuronio::setPesos(double p[]) {
for (int i = 0; i < QTD_DE_ENTRADAS; i++)
this->pesos[i] = p[i];
}
void Neuronio::calculaSaida() {
this->saida = 0;
for (int i = 0; i < QTD_DE_ENTRADAS; i++)
this->saida = this->saida + (this->entradas[i] * this->pesos[i]);
this->saida = this->saida + this->bias;
}
void Neuronio::classifica() {
if (this->saida >= 0)
this->classificacao = 1;
else
this->classificacao = -1;
}
void Neuronio::calculaErroLocal() {
this->erroLocal = this->classificacaoIdeal - this->classificacao;
}
void Neuronio::calculaDeltas() {
for (int i = 0; i < QTD_DE_ENTRADAS; i++) {
this->deltas[i] = 0;
this->deltas[i] = this->entradas[i] * this->erroLocal * TAXA_APRENDIZAGEM; //taxa_aprendizagem * erro_local_n * entrada_n
}
}