示例#1
0
    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
示例#2
0
    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)