galear eu fiz uma RNA, mas ela nao aprende de jeito nenhum o resultado tende sempre a zero e depois da NaN, o codigo de atualização do pesos está logo ai a baixo, eu axo que o erro esta ai. Se alguem puder ajudar.
[code]public void calculaPesoSaida(ArrayList saidaDesejada,ArrayList saidaO){
double np,peso,entrada,linhaNet,delta;
double bias=0, deltaBias=0;
Neuronio neuro;
for(int n=0;n<estrutura.get(estrutura.size()-1).size();n++){
neuro = estrutura.get(estrutura.size()-1).getN(n);
linhaNet = neuro.linhaNet();
for (int p=0;p<estrutura.get(estrutura.size()-2).size();p++){
peso = neuro.getPeso(p);
entrada = neuro.getEntrada(p);
delta = taxa*(saidaDesejada.get(n)-saidaO.get(n))*linhaNet*entrada;
np = peso+delta;
saidaT.getN(n).setPeso(p, np);
}
deltaBias = taxa*(saidaDesejada.get(n)-saidaO.get(n))*linhaNet;
bias = neuro.getBias()+deltaBias;
saidaT.getN(n).setBias(bias);
}
}
public void calculaPesoHidden(ArrayList<Double> entrada,ArrayList<Double> saidaDesejada){
double bias=0, deltaBias=0;
for(int c=estrutura.size()-2;c>=0;c--){
Camada cHidden = estrutura.get(c);
Camada cSaida = estrutura.get(c+1);
for(int n=0;n<cHidden.size();n++){
Neuronio neuroH = estrutura.get(c).getN(n);
double somatorio=0,novoPeso;
for(int ns=0;ns<cSaida.size();ns++){
Neuronio neuroS = cSaida.getN(ns);
somatorio += ((saidaDesejada.get(ns)-neuroS.getSaida())*neuroS.linhaNet()*neuroS.getPeso(n));
}
for(int i=0;i<entrada.size();i++){
double delta = taxa*neuroH.linhaNet()*neuroH.getEntrada(i)*somatorio;
novoPeso = neuroH.getPeso(i)+delta;
//System.out.println("PesoH"+n+": "+neuroH.getPeso(i)+" | "+neuroH.linhaNet()+"/"+somatorio+" | "+novoPeso);
estrutura.get(c).getN(n).setPeso(i, novoPeso);
}
//System.out.println("-----------------------------------");
deltaBias = taxa*neuroH.linhaNet()*somatorio;
bias = neuroH.getBias()+deltaBias;
estrutura.get(c).getN(n).setBias(bias);
}
}
}[/code]