def treino(self, entrada, saidaFinal):
        # Entrada -> Oculta
        entrada = Matriz.matriz(entrada)
        oculta = Matriz.mult(self.pesos_EO, entrada)
        oculta = Matriz.soma(oculta, self.bias_EO)
        oculta = Matriz.sigmoid(oculta)

        # Oculta -> Saida
        saida = Matriz.mult(self.pesos_OS, oculta)
        saida = Matriz.soma(saida, self.bias_OS)
        saida = Matriz.sigmoid(saida)

        #BACKPROPAGATION

        #Saida -> Oculta
        saidaFinal = Matriz.matriz(saidaFinal)
        saida_error = Matriz.sub(saidaFinal, saida)
        deriv_saida = Matriz.derivadaSigmoid(saida)
        oculta_t = Matriz.transposta(oculta)
        gradient_OS = Matriz.hadamard(deriv_saida, saida_error)
        gradient_OS = Matriz.mult_escalar(gradient_OS, self.taxa_aprendizado)
        delta_pesos_OS = Matriz.mult(gradient_OS, oculta_t)

        #Oculta -> Entrada
        pesos_OS_t = Matriz.transposta(self.pesos_OS)
        oculta_error = Matriz.mult(pesos_OS_t, saida_error)
        deriv_oculta = Matriz.derivadaSigmoid(oculta)
        entrada_t = Matriz.transposta(entrada)
        gradient_EO = Matriz.hadamard(deriv_oculta, oculta_error)
        gradient_EO = Matriz.mult_escalar(gradient_EO, self.taxa_aprendizado)
        delta_pesos_EO = Matriz.mult(gradient_EO, entrada_t)

        #Atualizando Pesos
        self.pesos_OS = Matriz.soma(self.pesos_OS, delta_pesos_OS)
        self.pesos_EO = Matriz.soma(self.pesos_EO, delta_pesos_EO)
示例#2
0
 def predict(self, entrada):
     # Retorna saida basiado na entrada
     entrada = Matriz.matrizLinha(entrada)
     pesos_t = Matriz.transposta(self.pesos)
     soma = Matriz.mult(entrada, pesos_t)
     soma = Matriz.array(soma)
     soma[0] -= self.bias
     saida = Hebb(soma[0])
     return saida
示例#3
0
 def treino(self, entrada, saida):
     entrada = Matriz.matrizLinha(entrada)
     pesos_t = Matriz.transposta(self.pesos)
     soma = Matriz.mult(entrada, pesos_t)
     soma.data[0][0] -= self.bias
     erro = saida - soma.data[0][0]
     delta = erro * self.taxa
     self.bias = delta * -1
     delta = Matriz.mult_escalar(entrada, delta)
     self.pesos = Matriz.soma(self.pesos, delta)
示例#4
0
    def EQM(self, padroes, entrada, saida):
        eqm = 0
        x = 0
        pesos_t = Matriz.transposta(self.pesos)
        for i in entrada:
            i = Matriz.matrizLinha(i)
            u = Matriz.mult(i, pesos_t)
            u = u.data[0][0] - self.bias
            erro = saida[x] - u
            x += 1
            eqm += erro**2
        eqm = eqm / padroes
        return eqm

        eqm = soma / padroes
        return eqm
示例#5
0
    def treino(self, entrada, saidaFinal):
        # Verificando Resultado
        entrada = Matriz.matrizLinha(entrada)
        pesos_t = Matriz.transposta(self.pesos)
        soma = Matriz.mult(entrada, pesos_t)
        soma = Matriz.array(soma)
        soma[0] -= self.bias
        saida = Hebb(soma[0])
        erro = False

        # Atualizando Pesos
        if (saida != saidaFinal):
            taxaErro = saidaFinal - saida
            delta = Matriz.mult_escalar(entrada, self.taxa * taxaErro)
            self.pesos = Matriz.soma(delta, self.pesos)
            self.bias += (taxaErro * self.taxa * -1)
            erro = True
        return erro
示例#6
0
 def predict(self, entrada):
     entrada = Matriz.matrizLinha(entrada)
     pesos_t = Matriz.transposta(self.pesos)
     soma = Matriz.mult(entrada, pesos_t)
     soma.data[0][0] -= self.bias
     return Hebb(soma.data[0][0])