Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Desafío: Entrenamiento del Perceptrón | Red Neuronal Desde Cero
Introducción a las Redes Neuronales

bookDesafío: Entrenamiento del Perceptrón

Antes de proceder con el entrenamiento del perceptrón, tenga en cuenta que utiliza la función de pérdida de entropía cruzada binaria discutida anteriormente. El último concepto clave antes de implementar la retropropagación es la fórmula para la derivada de esta función de pérdida con respecto a las activaciones de salida, ana^n. A continuación se muestran las fórmulas para la función de pérdida y su derivada:

L=(ylog(y^)+(1y)log(1y^))dan=y^yy^(1y^)\begin{aligned} L &= -(y \log(\hat{y}) + (1-y) \log(1 - \hat{y}))\\ da^n &= \frac {\hat{y} - y} {\hat{y}(1 - \hat{y})} \end{aligned}

donde an=y^a^n = \hat{y}

Para verificar que el perceptrón se está entrenando correctamente, el método fit() también imprime la pérdida promedio en cada época. Esto se calcula promediando la pérdida sobre todos los ejemplos de entrenamiento en esa época:

for epoch in range(epochs):
    loss = 0

    for i in range(training_data.shape[0]):
        loss += -(target * np.log(output) + (1 - target) * np.log(1 - output))

average_loss = loss[0, 0] / training_data.shape[0]
print(f'Loss at epoch {epoch + 1}: {average_loss:.3f}')
L=1Ni=1N(yilog(y^i)+(1yi)log(1y^i))L = -\frac1N \sum_{i=1}^N (y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i))

Finalmente, las fórmulas para calcular los gradientes son las siguientes:

dzl=dalfl(zl)dWl=dzl(al1)Tdbl=dzldal1=(Wl)Tdzl\begin{aligned} dz^l &= da^l \odot f'^l(z^l)\\ dW^l &= dz^l \cdot (a^{l-1})^T\\ db^l &= dz^l\\ da^{l-1} &= (W^l)^T \cdot dz^l \end{aligned}

Los datos de entrenamiento de ejemplo (X_train) junto con las etiquetas correspondientes (y_train) se almacenan como arreglos de NumPy en el archivo utils.py. Además, las instancias de las funciones de activación también se definen allí:

relu = ReLU()
sigmoid = Sigmoid()
Tarea

Swipe to start coding

  1. Calcular los siguientes gradientes: dz, d_weights, d_biases y da_prev en el método backward() de la clase Layer.
  2. Calcular la output del modelo en el método fit() de la clase Perceptron.
  3. Calcular da (danda^n) antes del bucle, que es el gradiente de la función de pérdida respecto a las activaciones de salida.
  4. Calcular da y realizar la retropropagación en el bucle llamando al método correspondiente para cada una de las capas.

Si la implementación del entrenamiento es correcta, dado el valor de la tasa de aprendizaje 0.01, la pérdida debería disminuir de forma constante en cada época.

Solución

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 2. Capítulo 10
single

single

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Suggested prompts:

Can you explain how the derivative of the binary cross-entropy loss is used in backpropagation?

What is the purpose of printing the average loss at each epoch?

Can you clarify how the gradients are computed using the provided formulas?

close

Awesome!

Completion rate improved to 4

bookDesafío: Entrenamiento del Perceptrón

Desliza para mostrar el menú

Antes de proceder con el entrenamiento del perceptrón, tenga en cuenta que utiliza la función de pérdida de entropía cruzada binaria discutida anteriormente. El último concepto clave antes de implementar la retropropagación es la fórmula para la derivada de esta función de pérdida con respecto a las activaciones de salida, ana^n. A continuación se muestran las fórmulas para la función de pérdida y su derivada:

L=(ylog(y^)+(1y)log(1y^))dan=y^yy^(1y^)\begin{aligned} L &= -(y \log(\hat{y}) + (1-y) \log(1 - \hat{y}))\\ da^n &= \frac {\hat{y} - y} {\hat{y}(1 - \hat{y})} \end{aligned}

donde an=y^a^n = \hat{y}

Para verificar que el perceptrón se está entrenando correctamente, el método fit() también imprime la pérdida promedio en cada época. Esto se calcula promediando la pérdida sobre todos los ejemplos de entrenamiento en esa época:

for epoch in range(epochs):
    loss = 0

    for i in range(training_data.shape[0]):
        loss += -(target * np.log(output) + (1 - target) * np.log(1 - output))

average_loss = loss[0, 0] / training_data.shape[0]
print(f'Loss at epoch {epoch + 1}: {average_loss:.3f}')
L=1Ni=1N(yilog(y^i)+(1yi)log(1y^i))L = -\frac1N \sum_{i=1}^N (y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i))

Finalmente, las fórmulas para calcular los gradientes son las siguientes:

dzl=dalfl(zl)dWl=dzl(al1)Tdbl=dzldal1=(Wl)Tdzl\begin{aligned} dz^l &= da^l \odot f'^l(z^l)\\ dW^l &= dz^l \cdot (a^{l-1})^T\\ db^l &= dz^l\\ da^{l-1} &= (W^l)^T \cdot dz^l \end{aligned}

Los datos de entrenamiento de ejemplo (X_train) junto con las etiquetas correspondientes (y_train) se almacenan como arreglos de NumPy en el archivo utils.py. Además, las instancias de las funciones de activación también se definen allí:

relu = ReLU()
sigmoid = Sigmoid()
Tarea

Swipe to start coding

  1. Calcular los siguientes gradientes: dz, d_weights, d_biases y da_prev en el método backward() de la clase Layer.
  2. Calcular la output del modelo en el método fit() de la clase Perceptron.
  3. Calcular da (danda^n) antes del bucle, que es el gradiente de la función de pérdida respecto a las activaciones de salida.
  4. Calcular da y realizar la retropropagación en el bucle llamando al método correspondiente para cada una de las capas.

Si la implementación del entrenamiento es correcta, dado el valor de la tasa de aprendizaje 0.01, la pérdida debería disminuir de forma constante en cada época.

Solución

Switch to desktopCambia al escritorio para practicar en el mundo realContinúe desde donde se encuentra utilizando una de las siguientes opciones
¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 2. Capítulo 10
single

single

some-alt