1 votos

Detección de eventos en datos de series temporales, ¿por qué no funciona mi modelo de red neuronal? (Keras)

Tengo datos de series temporales (x_train, shape=100x30000x3) que consisten en 100 muestras que contienen 3 secuencias con cada 30000 puntos de datos en el tiempo. Me gustaría detectar eventos en el tiempo (y_train, shape=1x30000), que es un vector binario (disperso) en el tiempo. Los eventos se codifican con 1 en el inicio, de lo contrario son 0 (similar a Aprendizaje automático para el reconocimiento de patrones en datos de sensores en tiempo real ).

Como los datos son repetitivos y en el tiempo, pensé en aplicar un LSTM:

model = Sequential()
model.add(LSTM(128,input_shape=(30000,3)))
model.add(Dropout(0.5))
model.add(Dense(256, activation='sigmoid'))
model.add(Dropout(0.5))
model.add(Dense(30000, activation='sigmoid'))

model.compile(loss='binary_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])

Aunque veo que mi pérdida está disminuyendo muy bien y mi precisión sube a 99,x% con cada iteración, mis vectores predichos no se ven bien en absoluto y son muy ruidosos (un montón de cerca de 0, no cerca de 1), no parece mach mi vector y_train 1x30000 cuando lo visualizo.

¿Es este un modelo apropiado, o he hecho algo muy mal?

2voto

PeterTecks Puntos 36

Este modelo no es necesariamente malo, pero son necesarios algunos cambios. Si he entendido bien, no se trata de un problema de etiquetas múltiples y la salida es una codificación en caliente:

Cambia la activación en la última capa a softmax y la pérdida a entropía categórica para empezar. De este modo, tu red sabrá que la salida es una distribución de probabilidad y tiene que sumar 1, mientras que ahora mismo trata todas las salidas como clases separadas.

Otra cosa que puedes probar es poner la capa LSTM return_sequences en True y jugar con la salida de la misma, de esta manera tu objetivo tendrá forma (30000,1) en lugar de (None,30000) lo cual tiene sentido ya que estás siguiendo un evento distribuido en el tiempo. No he hecho el procesamiento seq2seq yo mismo, pero hay muchos tutoriales en línea. Cambiará la configuración de su problema de muchos-a-uno a muchos-a-muchos que es en mi opinión más apropiado aquí.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X