Open celsofranssa opened 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.
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.
@flaviovdf ao implementar o método
feedforward
da classePerceptronLayer
percebi que o shape deprev_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.