Red Neuronal Desde Cero. ¡Sólo Python!

แชร์
ฝัง
  • เผยแพร่เมื่อ 18 เม.ย. 2021
  • Código:
    github.com/JACantoral/DL_fund...
    Código para procesar MNIST:
    github.com/JACantoral/DL_fund...
    Videos de teoría previos:
    - Cómo procesar MNIST: • Descargar y procesar M...
    - Funciones de activación: • Funciones de Activació...
    - Función Softmax: • Función SOFTMAX - RED...
    - Gradient Descent: • Gradient Descent - RED...
    - Backprogation: • “Backpropagation” - Fu...
    - Cross Entropy (función de costo): • Función de Costo - Cro...
    - Gradiente de la función de Costo: • Gradiente de la Funció...
    - Ejemplo completo forward y backward pass: • Backpropagation - Grad...
    Video previos de programación:
    - MNIST dataset: • Descargar y procesar M...
    Python documentation:
    - www.python.org/
    Numpy documentation:
    - numpy.org/
    ¡Llegó el momento de programar nuestra primera Red Neuronal desde Cero! Utilizando sólo Python, sin frameworks de Deep Learning. Para esto vamos a hacer uso de todos los conocimientos que hemos desarrollado a lo largo de esta serie y otros más que vamos a explicar a lo largo del video. En esta primera parte de este video, implementamos todas las funciones necesarias para el Forward Pass, como son la transformación lineal, la función ReLU, Softmax y Cross-Entropy. Con esto, después muestro como calcular el gradiente con respecto a los parámetros de la red neuronal. Así, en el siguiente video explico cómo implementar el loop de entrenamiento para que nuestra red neuronal aprenda.
    Acerca de la serie Fundamentos de Deep Learning con Python y PyTorch:
    En esta serie de videos explico qué son las Redes Neuronales (Neural Networks) y qué es Aprendizaje Computacional (Machine Learning) así como Deep Learning. Empezamos con los principios matemáticos fundamentales hasta su implementación en código. Para esto, primero utilizaremos Python y Numpy para entender los principios de programación de Redes Neuronales incluyendo el algoritmo de retropropagación (backpropagation). Con estas bases, presentaremos el framework PyTorch y construiremos modelos más complejos como son Redes Neuronales Convolucionales (Convolutional Neural Networks - CNNs).
    About the video series:
    In this video series I will explain what Neural Networks are, and how Deep Neural Networks work, from the mathematical principles to their implementation in code. Firstly, we will use pure Python and Numpy to understand the fundamentals including backpropagation for a simple Fully Connected Network, and from there we will build on to Convolutional Neural Networks (CNN) using PyTorch. I will be uploading at least one new video every week until we reach different architectures of CNNs. Then, depending on the response and interest in the series I may cover newer models using Generative Adversarial Networks (GANs), and Recurrent Neural Networks.

ความคิดเห็น • 29

  • @jorgehernanosoriomosquera1331
    @jorgehernanosoriomosquera1331 2 ปีที่แล้ว +5

    Soy estudiante de ingeniería de alimentos y ya estoy desarrollando mi trabajo de grado específicamente en "Optimización de películas comestibles". Conozco la teoría de las redes neuronales, no obstante, el cómo implementarlas en Python era algo que no sabía. Muchas gracias por el tiempo invertido, los vídeos son de mucha ayuda.

    • @PepeCantoralPhD
      @PepeCantoralPhD  2 ปีที่แล้ว +1

      Jorge, tus palabras son música para mis oídos. De verdad me llena de alegría que estos videos te sean de utilidad. Muchas gracias por el apoyo y mucho éxito en tu proyecto. Saludos!!!

  • @hanabi897
    @hanabi897 ปีที่แล้ว +4

    Muchas gracias Pepe, tu canal vale oro

    • @PepeCantoralPhD
      @PepeCantoralPhD  ปีที่แล้ว +1

      Muchas gracias por tu comentario y apoyo al canal, me motivan mucho para seguir! Saludos!

  • @lumafe1975
    @lumafe1975 ปีที่แล้ว

    Antes que nada otra felicitación por tu contenido! En el fondo PyToch usa Numpy para gestionar los tensores o hay un desarrollo propio para este fin?

  • @LearningWorldChatGPT
    @LearningWorldChatGPT 2 ปีที่แล้ว +2

    Pepe Cantoral, muchas gracias por compartir tus conocimientos!

    • @PepeCantoralPhD
      @PepeCantoralPhD  2 ปีที่แล้ว +1

      Muchas gracias Eddy! Muchos saludos!

  • @carlosarrasco
    @carlosarrasco 2 ปีที่แล้ว +1

    Excelente!!

    • @PepeCantoralPhD
      @PepeCantoralPhD  2 ปีที่แล้ว

      Muchas gracias por tu comentario y por tu apoyo! Saludos!

  • @lazarotorres8536
    @lazarotorres8536 ปีที่แล้ว +1

    Buenas. Muchas gracias por tus vídeos, soy estudiante de primer año de ingeniería nuclear y me están siendo muy útiles, lo q no me queda claro es por qué cuando calculas dW2 y db2 divides entre batch_size y cuando calcula da1, dW1 y db1 no. Muchas gracias

  • @armandorodarterodriguez8569
    @armandorodarterodriguez8569 ปีที่แล้ว

    Hola Pepe. Primeramente, muchas felicidades por este contenido. Tengo una duda, en las neuronas (de la capa softmax) todas comenten el mismo error o se calcula el gradiente (predicción - salidaEsperada) para cada una?

  • @manueldenis730
    @manueldenis730 2 ปีที่แล้ว

    Que tal Pepe. Muy educativos tus videos. Quería preguntarte si conoses de alguna librería, plataforma... donde se pueda aprender sobre redes neuronales evolutivas.

  • @110SEBA15
    @110SEBA15 2 ปีที่แล้ว +1

    8:26 existe una forma de mostrar esto un poco mas lindo usando tabulate:
    from tabulate import tabulate
    print(tabulate([['x_train', x_train.shape], ['y_train',y_train.shape], ['x_test', x_test.shape],['y_test',y_test.shape]], headers=['name','shape']))
    ejemplo output:
    name shape
    ------- ---------------
    x_train (60000, 28, 28)
    y_train (60000,)
    x_test (10000, 28, 28)
    y_test (10000,)

    • @PepeCantoralPhD
      @PepeCantoralPhD  2 ปีที่แล้ว

      Muchas gracias por tu excelente sugerencia! La tomaré en cuenta para ocasiones futuras!

  • @anthonymlop
    @anthonymlop 4 หลายเดือนก่อน

    Hola Pepe tengo una duda que llevo pensando mucho tiempo, por que se resta (y_hat - y) únicamente a los valores que debería ser 'y' no a toda la matriz de probabilidad

  • @MarcosHernandez-ie4xd
    @MarcosHernandez-ie4xd 2 ปีที่แล้ว +1

    Muy bueno!, que temas de matematicas son necesarios saber para aprender en ML y redes neuro, y en que orden recomendas aprender esos temas.

    • @PepeCantoralPhD
      @PepeCantoralPhD  2 ปีที่แล้ว +3

      Hola Marcos! Muchas gracias por tu comentario, desde mi punto de vista, los temas más importantes de matemáticas para ML son cálculo, algebra lineal, y probabilidad. Ahora, no necesitas saber todo el cálculo, es decir no es necesario saber derivar o integrar funciones complejas, pero sí es muy importante cuál es el significado de una derivada, derivada parcial o integral, la correcta interpretación de los resultados matemáticas pienso son más importantes que su ejecución a mano por ejemplo. Lo mismo aplica con álgebra lineal y probabilidad, por ejemplo no es necesario saber invertir a mano una matriz enorme, pero sí saber qué significa o cómo interpretar la inversa de una matriz. Esta es mi opinión basada en mi experiencia, otros profesores seguramente pueden tener puntos de vista diferentes. Te mando muchos saludos y te deseo mucho éxito en tu viaje en el mundo de ML y Deep Learning!

    • @MarcosHernandez-ie4xd
      @MarcosHernandez-ie4xd 2 ปีที่แล้ว

      @@PepeCantoralPhD Muchas gracias!!, saludos.

  • @zakaria756
    @zakaria756 2 ปีที่แล้ว +1

    Hola, como te va? Tengo una duda en el minuto 5:55 donde decis que normalizas los datos. De que te sirve exactametne que esten en el rango de 0 a 1? Esta buenisimo el video

    • @PepeCantoralPhD
      @PepeCantoralPhD  2 ปีที่แล้ว +5

      Hoal Amadeus766, muchísimas gracias por tu comentario y el apoyo al canal. Tu pregunta es excelente, normalizar en general es una práctica muy buena en problemas de machine learning, sobretodo cuando cuando tienes "features" con dimensiones diferentes. Imagina que quieres predecir el costo de una casa y por un lado un feature es el número de baños (por ejemplo 1 o 2) y otro feature es el tamaño en metros cuadrados (100mts cuadrados por ejemplo). Dado que las dimensiones están en rangos muy diferentes te conviene traerlos todos al mismo rango.
      Ahora, por qué traerlos al mismo rango? Esto es porque en general permitirá que todas las features empiecen con vamos a decir "la misma importancia" si tienes features en rangos de miles y otros en rangos de unidades, es probable que el modelo aprenda a darle más peso a los números más grandes. Además, también puedes imaginar que tu función de costo multidimensional tendría una forma elongada en las dimensiones más grandes y más angosta en las dimensiones más pequeñas, haciendo que el entrenamiento sea más lento, entonces traer las entradas al mismo rango hace que tu función de costo sea más simétrica y facilita un entrenamiento más rápido. Por otro lado, la forma que normalicé en este video es muy sencilla y usualmente no la más utilizada, en el video en esta liga
      th-cam.com/video/_shpKyA89QQ/w-d-xo.html
      presento una forma de normalizar más utilizada que da mejores resultados, donde haces que tus features tengan una distribución con media de 0 y desviación estándar de 1, que también ayuda a hacer más rápido el proceso de entrenamiento.
      Espero esto ayude a aclarar tu duda, muchas gracias por tu pregunta, y muchos saludos!!

    • @zakaria756
      @zakaria756 2 ปีที่แล้ว +1

      @@PepeCantoralPhD Gracias por tomarte el tiempo de elaborar la respuesta me sirvio bastante, enserio muchas gracias. Un saludo

    • @PepeCantoralPhD
      @PepeCantoralPhD  2 ปีที่แล้ว

      @@zakaria756 Fue un placer! Saludos

  • @davidernestoparadapinzon6156
    @davidernestoparadapinzon6156 2 ปีที่แล้ว +1

    Hola disculpa me aparece el siguiente error File "C:\Users\david\Documents\Universidad\IA
    econocimiento de caracteres\venv\lecturadedatos.py", line 194, in
    parameters = train(epochs=epochs, parameters=parameters, mb_size=mb_size, learning_rate=learning_rate)
    File "C:\Users\david\Documents\Universidad\IA
    econocimiento de caracteres\venv\lecturadedatos.py", line 178, in train
    scores2, z1, a1 = scores(x.T, parameters=parameters, activation_fcn=relu)
    TypeError: 'numpy.ndarray' object is not callable ;c

    • @PepeCantoralPhD
      @PepeCantoralPhD  2 ปีที่แล้ว +1

      Hola David, de nuevo una disculpa por demorar tanto en responder. Pudiste solucionar este problema, por el tipo de error lo único que se me ocurre es que tengas un arreglo también llamado scores, veo que sí usas el nombre escores2 para el resultado de la función scores, lo cual está bien. Pregunta, no habrás llamado a la función scores y asignado el resultado también a un arreglo llamado scores, de modo que cuando vuelves a llamar a la función scores ahora está llamando al arreglo? Por lo que vale la pena asegurarte de definir la función scores, para que el objeto scores haga referencia a la función y no al arreglo. Esto también me pasa en la segunda parte de este video th-cam.com/video/WQGolGJZz80/w-d-xo.html
      Muchos saludos y hasta pronto!

  • @akasha6287
    @akasha6287 ปีที่แล้ว +1

    Este curso es desde 0 o toca ya tener un conocimiento en programación?

    • @PepeCantoralPhD
      @PepeCantoralPhD  ปีที่แล้ว +1

      Hola!!! El video es desde cero en el sentido que se programa la red neuronal usando sólo librerías básicas de Python incluso para backpropagation. Pero sí se necesita un conocimiento previo de Python. Muchas gracias por tu comentario! Muchos saludos

  • @yilberrojas8306
    @yilberrojas8306 2 ปีที่แล้ว +1

    Todo youtube parte de Mnist no entiendo por que si esta demasiado trillado el ejemplo

    • @PepeCantoralPhD
      @PepeCantoralPhD  2 ปีที่แล้ว +4

      Hola Yilber, entiendo muy bien tu comentario, existen motivos didácticos relevantes, además de ser históricamente una de las primeras aplicaciones reales exitosas de redes neuronales, y poder comparar lo complejo que era entrenar un modelo para reconocer dígitos a principios de los 90 con lo sencillo que es en la actualidad permite poner en perspectica la evolución que ha tenido el área. Desde el punto de vista didáctico es un ejemplo que es fácil de evaluar visualmente y no presenta biases. Esas son algunas de las razones principales que yo encuentro. Por mi parte, creo que ya casi no utilizaré esta base de datos en el canal, ya que los temas que siguen estarán más en el edo. del arte con datasets más interesantes. Muchos saludos y muchas gracias por tu comentario!

  • @jameshopkins3541
    @jameshopkins3541 ปีที่แล้ว

    LOS VIDEOS SON OSCUROS Y DIFICILES DE LEER LOS COLORES SON DEPRIMENTES MEJOR BLANCO EN FONDO NEGRO O ALRREVES