def feedfoward(self, lista): entrada = Matriz.array2object(lista) """ CAMADA DE ENTRADA PARA CAMADA OCULTA""" #print("\n------ CAMADA ENTRADA => CAMADA OCULTA -----") camada_oculta = Matriz.multiplicaDuasMatriz(self.pesos_entrada_oculta, entrada) camada_oculta = Matriz.somarDuasMatriz(camada_oculta, self.bias_entrada_oculta) camada_oculta.aplicarSigmoid() #camada_oculta.printMatriz() """ CAMADA OCULTA PARA CAMADA DE SAIDA""" #print("\n------CAMADA OCULTA -> CAMADA SAIDA-----") camada_saida = Matriz.multiplicaDuasMatriz(self.pesos_oculta_saida, camada_oculta) camada_saida = Matriz.somarDuasMatriz(camada_saida, self.bias_oculta_saida) camada_saida.aplicarSigmoid() #camada_saida.printMatriz() return camada_saida
def backpropagation(self, entrada, esperado): """transformando a entrada em matriz""" entrada = Matriz.array2object(entrada) """feedfoward""" """ CAMADA DE ENTRADA PARA CAMADA OCULTA""" print("\n------ CAMADA ENTRADA => CAMADA OCULTA -----") camada_oculta = Matriz.multiplicaDuasMatriz(self.pesos_entrada_oculta, entrada) camada_oculta = Matriz.somarDuasMatriz(camada_oculta, self.bias_entrada_oculta) camada_oculta.aplicarSigmoid() camada_oculta.printMatriz() """ CAMADA OCULTA PARA CAMADA DE SAIDA""" print("\n------CAMADA OCULTA -> CAMADA SAIDA-----") camada_saida = Matriz.multiplicaDuasMatriz(self.pesos_oculta_saida, camada_oculta) camada_saida = Matriz.somarDuasMatriz(camada_saida, self.bias_oculta_saida) camada_saida.aplicarSigmoid() camada_saida.printMatriz() """backpropagation""" esperado = Matriz.array2object(esperado) """SAIDA P/ OCULTA""" """calculo do erro""" erro_de_saida = Matriz.subtrairMatriz(esperado, camada_saida) #erro_de_saida.printMatriz() derivada_da_saida = self.derivadaElementosMatriz(camada_saida) #derivada_da_saida.printMatriz() """multiplicacao hadamard""" gradiente = Matriz.hadamard(erro_de_saida, derivada_da_saida) #gradiente.printMatriz() """aplicando learning_rate""" gradiente = Matriz.produtoEscalar(gradiente, self.learning_rate) """AJUSTAR BIA""" self.bias_oculta_saida = Matriz.somarDuasMatriz( self.bias_oculta_saida, gradiente) """multiplicando pela camada oculta transposta""" oculta_transposta = Matriz.transporMatriz(camada_oculta) gradiente = Matriz.multiplicaDuasMatriz(gradiente, oculta_transposta) #gradiente.printMatriz() self.pesos_oculta_saida = Matriz.somarDuasMatriz( self.pesos_oculta_saida, gradiente) """""" """CAMADA OCULTA P/ ENTRADA """ peso_oculta_saida_transposta = Matriz.transporMatriz( self.pesos_oculta_saida) erro_oculta = Matriz.multiplicaDuasMatriz(peso_oculta_saida_transposta, erro_de_saida) #erro_oculta.printMatriz() """aplicando derivada camada oculta""" derivada_camada_oculta = self.derivadaElementosMatriz(camada_oculta) entrada_transposta = Matriz.transporMatriz(entrada) gradiente_oculta = Matriz.hadamard(erro_oculta, derivada_camada_oculta) gradiente_oculta = Matriz.produtoEscalar(gradiente_oculta, self.learning_rate) """AJUSTAR BIA""" self.bias_entrada_oculta = Matriz.somarDuasMatriz( self.bias_entrada_oculta, gradiente_oculta) gradiente_oculta = Matriz.multiplicaDuasMatriz(gradiente_oculta, entrada_transposta) self.pesos_entrada_oculta = Matriz.somarDuasMatriz( self.pesos_entrada_oculta, gradiente_oculta)