[Recursos] Aprehendiendo sobre redes neuronales

telemaco103

#148 No te creas que vamos sobrados en Matemáticas, que somos Telecos, tampoco damos tanto como otras carreras. De hecho, me pasó algún paper dónde venía algún desarrollo matemático, usando cosas que no había visto en la vida, como hiperplanos de Hilbert y me asusté bastante (aparqué el paper). A lo mejor lo dijo un poco para meter miedo, nunca se sabe jajaja.

Veo que el hilo está bastante activo así que en cuanto me ponga a estudiar por mi cuenta seré asiduo por aquí.

Unrack

Diría yo que el contenido matemático de modelos de machine learning es un 10% del usado de forma clásica en modelos homocedasticos/heterocedasticos.

1
Huk

En las 4 empresas más grandes de producción cárnica de software de España, la gente que está tocando neural nets, lo hace a través de un producto de terceros y una web. Ni sabe, ni quiere saber nada. De hecho, los arquitectos jefes, no han invertido ni minuto en por ejemplo, crear el scoring de un bayes y buscar una salida lineal (Signal processing, OCR, NLP.. lo que sea) así que el entendimiento teórico es de chiste. A día de hoy no saben la diferencia entre supervised y unsupervised, yo que se xD.

No sufráis, hay tiempo todavía para coméroslos <3

1 respuesta
Unrack

#153 Yo he visto resultados de varios "expertos" sobre señales/series temporales que bato con un modelo de persistencia de un paso. No tiene sentido, ni siquiera saben lo que hacen.

2
1 mes después
Ulmo

Me dejo caer por aquí para soltaros esto y me voy:

Weight Agnostic Neural Networks

No nos engañemos, lo que más me han gustado son los dibujitos.

PD:Shiiit! no los puedo insertar.

3
B

Aplaudo la iniciativa de crear este hilo!
Me inicié hace unos meses en el tema siguiendo un par de referencias que me recomendaron:

  • Foundations of Machine Learning (Mehryar Mohri et al)
  • Pattern Recognition and Machine Learning (Christopher Bishop)

Tienen un carácter teórico/matemático, pero ese es mi background y la cabra tira al monte...

Hace unos meses asistí a un minicurso que impartió un matemático muy máquina llamado M. Wolff en la U. Autónoma de Madrid. Es conocido por sus trabajos en teoría de la información cuántica, aunque recientemente se ha interesado por Machine Learning y está elaborando unos apuntes que se actualizan periódicamente (muy matemáticos también). Aquí tenéis el enlace por si hay algún interesado:

http://www-m5.ma.tum.de/Allgemeines/MA4801_2018S

3
1 comentario moderado
8 días después
hda

#157 buenas, compañero. Lo que propones suscita sin duda una discusión apasionante. Pero este creo que no es el hilo apropiado para el debate. ¡Abre uno! 😁

B

Pude un clasificador diferenciar una paella valenciana 100% de un arroz con cosas si ambos llevan azafrán? ¿Cuantas imágenes serían necesarias para entrenarla?

4
Zerokkk

Muy buenas!

Llevo algún tiempo dejando de lado el tema de ML, pero quería pediros un poco de ayuda con una duda que para muchos, será básica. Veréis, hasta ahora lo que más me ha faltado en este campo, más que otra cosa, es coger práctica y evaluar modelos. Tanto diseñar la arquitectura como parametrizarla son cosas en las que soy un noob total.

A ver si me podéis ayudar con este ejercicio, entonces. Me bajé un dataset de imágenes de células infectadas con malaria, con 2.5k de imágenes de células infectadas y 1.5k de células no infectadas. El código que vais a ver ahora en Keras trata de construir una red convolucional que actúe como clasificador:

spoiler

Resultados: tras acabar todos los epochs, he llegado a conseguir resultados entre el 91 y 93% de accuracy. Creo que pese a que no está mal para un first try, es muy, muy mejorable. He probado a añadir distintas capas, a cambiar ciertos parámetros y demás, pero lo máximo que he llegado a conseguir creo que fue 93.43% de accuracy si no recuerdo mal.

¿Qué cambios me recomendaríais hacer en la CNN para mejorarla? ¿Veis algún error grande y tosco en mi código sobre el que pueda aprender?

¡Gracias!

1 respuesta
HeXaN

#160 EarlyStopping y ModelCheckpoint, por ejemplo.

1 1 respuesta
Zerokkk

#161 ¿Podrías explicar un poco eso? Gracias por la ayuda igualmente.

edit: vale, acabo de echarle un ojo en la docu de Keras, mola. Básicamente son para parar el entrenamiento cuando ya no mejora más, y para guardar el dump del modelo, ¿no? Es algo que la verdad buscaba (y por tanto te lo agradezco mogollón), pero yo más bien lo que quería era ver cómo podía mejorar los resultados de mi CNN, y ver si conseguía rascar algo más de precisión. 93% se me hace poco para lo "fáciles" que son de interpretar las imágenes a simple vista; me gustaría intentar lograr un 96-97% al menos, que creo que debería ser lograble. ¿Qué improvements harías a mi código?

1 respuesta
HeXaN

#162 Es que con esas dos cosas mejorarías porque guardarías siempre el mejor modelo en vez de devolver el modelo de la última época (no tiene que ser el mejor porque puede tener sobreentrenamiento) como haces ahora.

1 respuesta
Zerokkk

#163 Afortunadamente no se da model overfitting en esta arquitectura; para estos epochs dados, el modelo sigue mejorando, aunque poquito (entre el epoch 4 y el 5 no hay más de un 1% de mejoría). Pero está guay igualmente, gracias!

¿Crees que está bien montada, que requiere cambiar algún parámetro, o añadir más hidden layers? Con una hidden layer más (convlayer + maxpooling) más, no obtengo mejores resultados, pero no he probado con otras fórmulas todavía.

3 respuestas
Ardi

#164 Has probado con alguna capa de dropout??

1 respuesta
Zerokkk

#165 No, ¿cómo funcionan y por qué crees que sería aplicable a este caso? Tengo entendido que son para reducir el overfitting, pero creo que no tengo en este caso (quizá me equivoque).

1 respuesta
Ardi

#166 yo programo en tensorflow esta un pelin por debajo de keras, es más de programar mas manualmente. Lo que hace esa capa en si es desactivar ciertas neuronas de forma aleatoria en cada iteraccion, suele mejorar algo el rendimiento de la red

1
HeXaN

#164 Aumenta el número de épocas (cinco épocas no es nada en una red neuronal). Yo he llegado a un 99,34% simplemente con eso.

1 1 respuesta
Zerokkk

#168 Voy a probar, a ver qué tal.

#168HeXaN:

Yo he llegado a un 99,34% simplemente con eso.

¿En qué dataset/problema te refieres que has conseguido esos resultados? ¿O te refieres en una CNN cualquiera?

Unrack

#164 Si no has experimentado overfitting tira por más épocas. (No te extrañe que los tiempos de computo sean muy grandes). De forma manual haría eso (con earlystoppings claro) y cuando llegues a la mejor respuesta podrías intentar reducir el learning rate y reentrenar desde ese punto.
Estas cosillas son la base sobre la que trabajar. Podrías experimentar sobre funciones de activación, métodos de optmización...

Ahora mismo yo estoy intentando elaborar una metodología automatica que de estimaciones sobre series temporales partiendo de la librería lightgbm (ensemble de árboles) y se comporta de una forma tremendamente robusta.

1 1 respuesta
Zerokkk

#170 Ahora he probado a hacer unos cambios tontos así rápidos, y he mejorado de 0.93 (última medición) a 0.953 con:

  • 12 epochs en lugar de 5.
  • Tres capas de convolución en lugar de 2, con 48, 32 y 16 celdas cada una. Maxpooling posterior después de cada capa.
  • Batch size de 36 a 48.

¿Tiene sentido hacer lo que hice en la línea dos? Supose que convolucionando primero sobre un grid mayor y luego ir bajando el número de celdas, el resultado mejoraría.

2 respuestas
Unrack

#171 No estoy muy puesto en tratamiento de imágenes. Pero si no me equivoco una buena intuición para entender las redes convolucionales es la representación de informacion en distintos espacios latentes. En ese sentido la idea es ir comprimiendo la info de un panel de X*y(pixeles). En ese sentido a menudo se experimenta con aumentar (incluso se podría hablar de que se trata de augmented data) el numero de filtros para posteriormente descender hasta la salida final.

HeXaN

#171 Lo único que tienes que hacer es aumentar la épocas a 50 y listo.

Meter más capas sólo vale en problemas complejos y este, con la arquitectura inicial, va que arde.

Podrías jugar con el tamaño de la ventana de convolución o el batch size, pero es tontería llegando casi al 100% aumentando las épocas simplemente.

1
Ardi

Una duda tonta si tengo solamente dos sets uno para training y otro para evaluation, en un 80% y 20%, me han pedido que ahora utilice test y evaluation, veis bien repartido un 60,20,20 y en el caso del test que diferencia hay con el eval y el train?

2 respuestas
Unrack

#174 Evalua que esas particiones sean "correctas". Es decir, mira distribuciones. Y en caso de que tengas un poco de sesgo en el modelo aumenta el porcentaje de train.

HeXaN

#174 Normalmente, para la partición de validation, se suele dejar un 10% de los datos.

1 mes después
hda

Este es un anuncio para los 108 favs este hilo (y para los demás)

El compañero @Schwartz y yo ya nos hemos enrolado en el archifamoso MOOC sobre machine learning que imparte el Dr. Andrew Ng (Stanford) en Coursera. El curso, que es gratuito, comienza el 30 de este mes. Sin embargo, tanto él como yo hemos pagado por el certificado (70€); no porque valga más o menos, sino por motivarnos para terminarlo.

Si alguien más quiere apuntarse con nosotros, ¡genial! Considero oportuno utilizar este mismo hilo para hacer seguimiento del curso e incluso apoyarnos con los ejercicios. Además, cuantos más seamos más entretenido será :)

Enlace al curso: https://www.coursera.org/learn/machine-learning (empieza el 30 de septiembre, 11 semanas)

5 3 respuestas
HeXaN

#177 Es de los mejores cursos de Coursera. Yo lo hice hace años ya.

1 2 respuestas
hda

#178 pues a ver si se anima gente y así le damos vidilla a este hilo conforme vayamos sacando el curso adelante. Sabía que era un buen MOOC, pero tu comentario me anima incluso más :)

Nucklear

#177 Pues estoy muy tentado a hacerlo. Voy a ver como tengo el tiempo por que tengo que sacarme otra cert tambien, pero estaba buscando un curso de este estilo y pinta muy bien.

#178 Hace falta algun requisito previo o con conocer algo las bases y python es suficiente?

1 respuesta