Aprendiendo Recurrent Neural Networks (Parte 2): Dándole "memoria" a nuestra red y logrando un MAE de 10.05
En la Parte 1 de esta serie, comenzamos nuestro viaje para predecir la falla de turbinas...
Full article excerpt tap to expand
try { if(localStorage) { let currentUser = localStorage.getItem('current_user'); if (currentUser) { currentUser = JSON.parse(currentUser); if (currentUser.id === 3632484) { document.getElementById('article-show-container').classList.add('current-user-is-article-author'); } } } } catch (e) { console.error(e); } galp76 Posted on Apr 28 Aprendiendo Recurrent Neural Networks (Parte 2): Dándole "memoria" a nuestra red y logrando un MAE de 10.05 #machinelearning #python #deeplearning #dataengineering En la Parte 1 de esta serie, comenzamos nuestro viaje para predecir la falla de turbinas aeroespaciales de la NASA. Logramos limpiar nuestros datos, eliminar los sensores "muertos", normalizar las lecturas y, lo más importante, aplicar el Piecewise Linear RUL topando la vida útil a 125 ciclos. Teníamos una tabla de datos impecable, pero nos enfrentábamos a un problema grave: las redes neuronales clásicas no tienen memoria. Si a una red normal le mostramos una foto de un manómetro marcando 50 PSI, no sabe si la presión está subiendo, bajando o estable. Pero si le muestro un "video" de los últimos 30 segundos donde la aguja pasa de 20 a 50 PSI, cualquier una red diseñada correctamente detectará una tendencia. En esta Parte 2, vamos a convertir nuestros datos estáticos en "videos", construiremos nuestro cerebro con una red LSTM y veremos los asombrosos resultados. El concepto de las "Sliding Windows" (Ventanas Deslizantes) Para darle contexto histórico a nuestra IA, necesitamos transformar nuestra tabla plana (2D) en un cubo de datos (3D). Para esto usamos una técnica llamada Ventanas Deslizantes. Definimos una ventana de 30 ciclos. La IA mirará los vuelos del 1 al 30 de un motor, y tratará de predecir cuánto le queda en el ciclo 30. Luego, la ventana se "desliza": mirará del 2 al 31, e intentará predecir el ciclo 31. Y así sucesivamente. Aquí está la función en Python (usando NumPy) que hace esta magia: import numpy as np def crear_secuencias(df, longitud_secuencia, columnas_sensores): X, Y = [],[] # Iteramos motor por motor para no mezclar vuelos de turbinas distintas for id_motor in df['id_motor'].unique(): df_motor = df[df['id_motor'] == id_motor] datos_sensores = df_motor[columnas_sensores].values datos_rul = df_motor['RUL'].values for i in range(len(df_motor) - longitud_secuencia + 1): ventana_X = datos_sensores[i : i + longitud_secuencia] X.append(ventana_X) # El objetivo a predecir es el RUL del ÚLTIMO ciclo de la ventana etiqueta_Y = datos_rul[i + longitud_secuencia - 1] Y.append(etiqueta_Y) return np.array(X), np.array(Y) # Aplicamos la función pidiendo 30 ciclos de memoria hacia atrás longitud_ventana = 30 X_train, Y_train = crear_secuencias(df_train, longitud_ventana, columnas_sensores) print(f"Forma de X_train: {X_train.shape}") Enter fullscreen mode Exit fullscreen mode Al ejecutar esto, la consola nos devolvió (17731, 30, 14). ¿Qué significa esto? Que hemos creado 17,731 "mini-videos", donde cada uno dura 30 ciclos temporales y monitorea 14 sensores simultáneamente. Construyendo el Cerebro: La arquitectura LSTM Con nuestros datos listos, era hora de usar TensorFlow/Keras para diseñar nuestra red neuronal. Elegí una LSTM (Long Short-Term Memory). Estas redes tienen "compuertas" lógicas (olvido, entrada y salida) que deciden matemáticamente qué tendencias históricas son importantes para el desgaste y cuáles son solo ruido pasajero. La arquitectura fue sencilla: from tensorflow.keras.models import Sequential from tensorflow.keras.layers…
This excerpt is published under fair use for community discussion. Read the full article at DEV Community.