Redes neurais, duvida sobre calculo

0 respostas
D
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.
public void calculaPesoSaida(ArrayList<Double> saidaDesejada,ArrayList<Double> 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);
            }   
        }
        
    }
Criado 28 de junho de 2009
Respostas 0
Participantes 1