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)
def predict(self, entrada): # 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) saida = Matriz.array(saida) return saida