deep-ufmg / praticas

13 stars 10 forks source link

Feedforward Implementation #2

Open celsofranssa opened 5 years ago

celsofranssa commented 5 years ago

@flaviovdf ao implementar o método feedforward da classe PerceptronLayer percebi que o shape de prev_a é (100, 784). Mas não deveria ser um vetor coluna, ao invés de uma matriz?

Pela definição, onde, é a matriz de pesos da camada l, é o vetor coluna de ativações da camada anterior. Lembrando que é o vetor de features .

Obrigado, Celso.

leandrolcampos commented 5 years ago

O notebook usou uma definição de z[l] e a[l] diferente da que vimos em sala de aula.

Para adaptar a elas, usei o seguinte no método feedforward: self.z = np.dot(prev_a, self.w) + self.b e self.a = self.act_func(self.z).

E no método backpropagate, usei: der_w = np.dot(prev_a.T, delta), der_b = np.mean(delta, axis=0), prev_z = prev_layer.z.reshape(prev_a.shape) e prev_delta = np.dot(delta, self.w.T) * prev_layer.der_act_func(prev_z).

Aparentemente, funcionou. Mas acho bem confuso ficar mudando as definições e notações de um material para outro.

celsofranssa commented 5 years ago

Realmente, isso dificulta muito o aprendizado. A forma como você resolveu funcionou, mas (por ignorancia minha talvez) não consegui enxergar o porquê de usá-la.