def teste_propagacao_apenas_armazena_valor(self):
        entrada_teste = Entrada()

        self.assertEqual(entrada_teste.valor, None)

        entrada_teste.propagacao(42)
        self.assertEqual(entrada_teste.valor, 42)
    def teste_retropropagacao_de_entradas_e_pesos(self):
        X, W, b = Entrada(), Entrada(), Entrada()
        y = Entrada()

        linear = Linear([X, W, b])
        sigmoide_teste = Sigmoide([linear])
        custo = EQM([y, sigmoide_teste])

        X.propagacao(np.array([[1., 0.], [1., 1.]]))
        W.propagacao(np.array([[0.], [0.]]))
        b.propagacao(np.array([0, 0]))
        y.propagacao(np.array([0, 1]))

        linear.propagacao()
        sigmoide_teste.propagacao()
        custo.propagacao()

        custo.retropropagacao()
        sigmoide_teste.retropropagacao()

        sigmoide_derivada = sigmoide_teste._derivada(linear.valor)
        erro = (y.valor - sigmoide_teste.valor)

        gradiente_entradas = (-2 / 2) * (erro * sigmoide_derivada)

        np.testing.assert_almost_equal(sigmoide_teste.gradientes[linear],
                                       gradiente_entradas)
Beispiel #3
0
    def teste_ordenacao_topologica_de_nos(self):
        entrada_1 = Entrada()
        entrada_2 = Entrada()

        soma_teste = Soma(entrada_1, entrada_2)
        dict_entrada = {entrada_1: 42, entrada_2: 20}

        grafo_ordenado = [entrada_1, entrada_2, soma_teste]
        self.assertEqual(ordenacao_topologica(dict_entrada), grafo_ordenado)
    def teste_erro_quadratico_medio_para_saida_e_aproximacao(self):
        y, y_chapeu = Entrada(), Entrada()

        y.propagacao(np.array([1, 2, 3]))
        y_chapeu.propagacao(np.array([4.5, 5, 10]))

        eqm_teste = EQM([y, y_chapeu])
        eqm_teste.propagacao()

        self.assertAlmostEqual(eqm_teste.valor, 23.4166666667)
    def teste_retropropagacao_saidas_e_corretos(self):
        y, y_chapeu = Entrada(), Entrada()

        y.propagacao(np.array([1, 2, 3]))
        y_chapeu.propagacao(np.array([4.5, 5, 10]))

        eqm_teste = EQM([y, y_chapeu])
        eqm_teste.propagacao()
        eqm_teste.retropropagacao()

        gradiente_entradas = (-2 / 3) * (y.valor - y_chapeu.valor)
        gradiente_respostas = (2 / 3) * (y.valor - y_chapeu.valor)

        np.testing.assert_almost_equal(eqm_teste.gradientes[y_chapeu],
                                       gradiente_entradas)
        np.testing.assert_almost_equal(eqm_teste.gradientes[y],
                                       gradiente_respostas)
    def teste_propagacao_soma_dois_nos_de_entrada(self):
        entrada_1 = Entrada()
        entrada_2 = Entrada()
        entrada_1.propagacao(42)
        entrada_2.propagacao(20)

        soma_teste = Soma(entrada_1, entrada_2)
        soma_teste.propagacao()

        self.assertEqual(soma_teste.valor, 62)
    def teste_retropropagacao_de_entradas_e_pesos(self):
        X, W, b, y = Entrada(), Entrada(), Entrada(), Entrada()
        linear_teste = Linear([X, W, b])

        custo = EQM([y, linear_teste])

        X.propagacao(np.array([[1., 1.], [1., 1.]]))
        W.propagacao(np.array([[1., 1.], [1., 1.]]))
        b.propagacao(np.array([0, 0]))
        y.propagacao(np.array([1, 3]))

        linear_teste.propagacao()
        custo.propagacao()

        custo.retropropagacao()
        linear_teste.retropropagacao()

        erro = (y.valor - linear_teste.valor)

        gradiente_entradas = (-2 / 3) * erro.dot(W.valor)
        gradiente_pesos = (-2 / 3) * erro.dot(X.valor)
        gradiente_vies = (-2 / 3) * erro.sum(axis=1)

        np.testing.assert_almost_equal(linear_teste.gradientes[X],
                                       gradiente_entradas)
        np.testing.assert_almost_equal(linear_teste.gradientes[W],
                                       gradiente_pesos)
        np.testing.assert_almost_equal(linear_teste.gradientes[b],
                                       gradiente_vies)
Beispiel #8
0
    def teste_propagacao_da_rede(self):
        entrada_1 = Entrada()
        entrada_2 = Entrada()
        entrada_1.propagacao(42)
        entrada_2.propagacao(20)

        soma_teste = Soma(entrada_1, entrada_2)
        grafo_ordenado = [entrada_1, entrada_2, soma_teste]

        propagacao(grafo_ordenado)
        saida = soma_teste.valor
        self.assertAlmostEqual(saida, 62)
    def teste_produto_escalar_de_nos_de_entradas_e_pesos(self):
        entradas, pesos, vies = Entrada(), Entrada(), Entrada()

        entradas.propagacao([6, 12, 3])
        pesos.propagacao([0.5, 0.25, 1.5])
        vies.propagacao([2])

        linear_teste = Linear([entradas, pesos, vies])
        linear_teste.propagacao()

        self.assertEqual(linear_teste.valor, 12.5)
    def teste_produto_escalar_matrizes_de_entradas_e_pesos(self):
        X, W, b = Entrada(), Entrada(), Entrada()

        X.propagacao(np.array([[-1., -2.], [-1, -2]]))
        W.propagacao(np.array([[2., -3], [2., -3]]))
        b.propagacao(np.array([-3., -5]))

        linear_teste = Linear([X, W, b])
        linear_teste.propagacao()

        saida = np.array([[-9., 4.], [-9., 4.]])
        self.assertTrue((linear_teste.valor == saida).all())
    def teste_sigmoide_em_produto_escalar_de_matrizes_e_pesos(self):
        X, W, b = Entrada(), Entrada(), Entrada()

        X.propagacao(np.array([[-1., -2.], [-1, -2]]))
        W.propagacao(np.array([[2., -3], [2., -3]]))
        b.propagacao(np.array([-3., -5]))

        linear = Linear([X, W, b])
        linear.propagacao()

        sigmoide_teste = Sigmoide([linear])
        sigmoide_teste.propagacao()

        saida = np.array([[1.23394576e-04, 9.82013790e-01],
                          [1.23394576e-04, 9.82013790e-01]])
        np.testing.assert_almost_equal(sigmoide_teste.valor, saida)
Beispiel #12
0
    def teste_retropropagacao_da_rede(self):
        entradas, pesos, vies, y = Entrada(), Entrada(), Entrada(), Entrada()

        entradas.propagacao(np.array([[-1., -2.], [-1, -2]]))
        pesos.propagacao(np.array([[2., 2], [3., 3]]))
        vies.propagacao(np.array([-3., -3]))
        y.propagacao(np.array([1., 2.]))

        linear = Linear([entradas, pesos, vies])
        sigmoide = Sigmoide([linear])
        custo = EQM([y, sigmoide])

        grafo_ordenado = [entradas, pesos, vies, linear, sigmoide, y, custo]

        propagacao(grafo_ordenado)
        retropropagacao(grafo_ordenado)

        saida = np.array([[8.3504878e-05, 8.3504878e-05],
                          [8.3504878e-05, 8.3504878e-05]])
        np.testing.assert_almost_equal(pesos.gradientes[pesos], saida)
    def teste_propagacao_soma_n_nos_de_entrada(self):
        entrada_1 = Entrada()
        entrada_2 = Entrada()
        entrada_3 = Entrada()
        entrada_1.propagacao(42)
        entrada_2.propagacao(10)
        entrada_3.propagacao(40)

        soma_teste = Soma(entrada_1, entrada_2, entrada_3)
        soma_teste.propagacao()

        self.assertEqual(soma_teste.valor, 92)