Boa tarde pessoal, gostaria de saber como comentar esse código, tipo, o que as linhas de códigos abaixo fazem.
Desde já muito obrigado.
package redeneural;
import javax.swing.JOptionPane;
/**
*
*
*Condições do Sitema
*pesosIniciais = 0 (TODOS)
*taxaAprendizado = 1
*bias = 1
*fnet v >= 0 saida = 1
*fnet v < 0 saida = 0
*1 = quadricula marcada
*0 = quadricula nao marcada
*/
public class ReconhecimentoCaracteresLogica {
// Pesos dos neuronios TODOS iniciando com 0
public static int[][] pesosNeuronio = new int[4][70];
// TX de aprendizado
public static final int TAXA_DE_APRENDIZADO = 1;
// Saidas esperadas dos neuronios matriz [9][4]
public static int[][] saidasNeuronio = {
// letra Q neuronios de 1 a 4
{0, 0, 0, 0},
// letra S neuronios de 1 a 4
{0, 0, 0, 1},
// Letra X neuronios de 1 a 4
{0, 0, 1, 0},
// Letra W neuronios de 1 a 4
{0, 0, 1, 1},
// Número 4 neuronios de 1 a 4
{0, 1, 0, 0},
// Letra C neuronios de 1 a 4
{0, 1, 0, 1},
// Letra R neuronios de 1 a 4
{0, 1, 1, 0},
// Letra G neuronios de 1 a 4
{0, 1, 1, 1},
// Letra N neuronios de 1 a 4
{1, 0, 0, 0}
};
// Entradas das letras para o treinamento matriz [70][9]
public static int[][] entradas = {
// Letra Q saida 0000
{0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0,
0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0},
// Letra S saida 0001
{0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 1, 1, 0, 0, 0, 0},
// Letra X saida 0010
{0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1,
0, 0, 1, 0, 0, 0, 1, 0},
// Letra W saida 0011
{1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1,
0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0,
0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0,
0, 0, 0, 1, 0, 1, 0, 0},
// Número 4 saida 0100
{0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 1, 0, 0},
// Letra C saida 0101
{0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 1, 1, 1, 0, 0},
// Letra R saida 0110
{0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0,
0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0,
0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0,
0, 0, 0, 1, 0, 1, 0, 0},
// Letra G saida 0111
{0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0,
0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1,
0, 0, 0, 1, 1, 1, 1, 0},
// Letra N saida 1000
{1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1,
0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1,
1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1,
1, 1, 0, 0, 0, 0, 1, 1},};
public static int calculaNet(int[][] entradas, int[][] pesos, int letraEntrada,
int neuronio) {
int net = 0;
for (int i = 0; i < entradas[letraEntrada].length; i++) {
net = net + (entradas[letraEntrada][i] * pesos[neuronio][i]);
}
return net;
}
public static int calculaFNet(int net) {
int saida = 0;
if (net >= 0) {
saida = 1;
}
return saida;
}
public static void calcularNovosPesos(int[][] pesos, int[][] entradas, int erro,
int taxaAprendizado, int letraEntrada, int neuronio) {
for (int i = 0; i < pesos[neuronio].length; i++) {
pesos[neuronio][i] = pesos[neuronio][i] + taxaAprendizado * (erro)
* entradas[letraEntrada][i];
}
}
public static int calculaNetExterno(int[] entradas, int[][] pesos, int neuronio) {
int net = 0;
for (int i = 0; i < entradas.length; i++) {
net = net + (entradas[i] * pesos[neuronio][i]);
}
return net;
}
public static void main(String[] args) {
int letraEntrada = 0;
int net = 0;
int encontrado = 0;
int desejado = 0;
int erro = 0;
boolean error = true;
while (error == true) {
boolean teveErro = false;
System.out.println("Aguarde, a rede esta sendo treinada...");
for (int neuronio = 0; neuronio < 4; neuronio++) {
net = calculaNet(entradas, pesosNeuronio, letraEntrada,
neuronio);
encontrado = calculaFNet(net);
desejado = saidasNeuronio[letraEntrada][neuronio];
if (encontrado == desejado) {
} else {
erro = desejado - encontrado;
calcularNovosPesos(pesosNeuronio, entradas, erro,
TAXA_DE_APRENDIZADO, letraEntrada, neuronio);
teveErro = true;
}
}
if (!teveErro) {
if (letraEntrada < 8) {
letraEntrada++;
} else {
error = false;
}
} else {
letraEntrada = 0;
}
}
System.out.println("Treinamento Finalizado. \n");
boolean sair = false;
while (sair == false) {
String ia = "";
do {
ia = JOptionPane.showInputDialog("Entre com os 70 dígitos binários");
} while (ia == null || ia.length() != 70);
String[] arrayDeString = new String[70];
for (int i = 0; i < arrayDeString.length; i++) {
arrayDeString[i] = ia.charAt(i) + "";
}
int[] entrada = new int[70];
entrada[0] = 1;
try {
String message = "";
for (int i = 1; i < entrada.length; i++) {
entrada[i] = Integer.parseInt(arrayDeString[i]);
if (i == 0) {
message = "Bias " + entrada[i];
message = message + "\n";
System.out.print("\t");
} else {
message = message + entrada[i] + " ";
if (i % 7 == 0) {
message = message + "\n";
}
}
}
System.out.println("\n");
int[] saidas = new int[4];
int nets = 0;
for (int neuronio = 0; neuronio < 4; neuronio++) {
nets = calculaNetExterno(entrada, pesosNeuronio, neuronio);
saidas[neuronio] = calculaFNet(nets);
}
for (int i = 0; i < saidasNeuronio.length; i++) {
if (saidas[0] == saidasNeuronio[i][0]
&& saidas[1] == saidasNeuronio[i][1]
&& saidas[2] == saidasNeuronio[i][2]
&& saidas[3] == saidasNeuronio[i][3]) {
switch (i) {
case 0:
message = message + "\n\nSua entrada foi a Letra Q";
break;
case 1:
message = message + "\n\nSua entrada foi a Letra S";
break;
case 2:
message = message + "\n\nSua entrada foi a Letra X";
break;
case 3:
message = message + "\n\nSua entrada foi a Letra W";
break;
case 4:
message = message + "\n\nSua entrada foi o Número 4";
break;
case 5:
message = message + "\n\nSua entrada foi a Letra C";
break;
case 6:
message = message + "\n\nSua entrada foi a Letra R";
break;
case 7:
message = message + "\n\nSua entrada foi a Letra G";
break;
case 8:
message = message + "\n\nSua entrada foi a Letra N";
break;
default:
System.out.println("Não foi encontrado sua entrada, verifique sua letra binária");
break;
}
message = message + "\nSaída: " + saidas[0] + ""
+ saidas[1] + "" + saidas[2] + "" + saidas[3];
}
}
JOptionPane.showMessageDialog(null, message);
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Número incorreto, Favor redigitar");
}
sair = true;
}
}
}