Redes con realimentación de capa

Las redes que hemos trabajado hasta ahora procesaban la información capa a capa de la entrada a la salida, como en el esquema:

La posibilidad que vamos a investigar ahora es añadirle a las entradas los valores de una capa en el instante anterior.

Realimentación de las capas ocultas

Puede ser una oculta, como el esquema:

Este caso viene ya previsto en Pytorch con una capa especial que incluye la realimentación. Si hay más capas ocultas, cada una se realimenta con su propia salida. Aquı́ tienes un fichero para trabajar. Fíjate que está incompleto. Tienes que definir o modificar:

Aparte de jugar con todo eso, también puedes elaborar más la parte posterior a las capas realimentadas. Está puesta sólo una lineal ¿por qué no varias con no -linealidades?

Al final, intenta llegar al mejor resultado posible.

Redes con realimentación de salida

En éstas la salida previa de la red se añade a las entradas:

Pytorch no lo tiene previsto, así que la definimos nosotros. Usa el fichero anterior, pero cambiando la definición de red por red=tipored.Realimsal(1, nocul,1) Nuevamente tienes que definir los mismos valores que antes, con la excepción del número de capas ocultas , que ahora vendrá dado por nocul, que debe ser un vector con tantos componentes como capas ocultas, y cada valor es la cantidad de procesadores de esa capa. Estas redes pueden ser muy inestables: cuidado con el ajuste, sobre todo cuando se vayan aproximando. Por otro lado, espera peor comportamiento de precisión que con las anteriores.

Redes con bloques realimentados individualmente

Vamos a trabajar con bloques LSTM, que ya vienen preparados en Pytorch. Esta vez la definición de red es red=tipored.Realimicror(1, capocul,nocul,1,inter) Tienes que definir los mismos valores que en el primer caso, y además inter, porque estos bloques sacan un estado interno (inter=0) y un resultado (inter=1) y se trata de elegir cuál tomamos como salida.