¿Es posible implementar una capa keras que siempre propague un vector fijo a las otras capas?
Estoy tratando de desarrollar una arquitectura de red neuronal que tenga dos entradas. Sin embargo, me gustaría fijar una de estas entradas vectoriales durante el entrenamiento. Sé que esto parece ser un sinsentido para la mayoría de ustedes, pero me gustaría saber cómo hacerlo para probar una hipótesis.
Es evidente que una forma de hacer esto sería preparar un conjunto de datos donde simplemente repita el valor fijo en todas las instancias que desee. Sin embargo, esto parece ser una mala solución.
Me gustaría saber si es posible implementar una capa de Keras que reciba un vector como parámetro fijo y siempre lo propague a las capas siguientes en cada paso de entrenamiento, mientras la otra entrada varíe. Estoy representando la idea en la imagen adjunta.
imagen enlace
¿Es posible hacer eso?
davy.ai
Sí, es posible implementar una capa de Keras que reciba un vector como un parámetro fijo y siempre lo propague a las capas siguientes durante el entrenamiento. Esto se puede lograr creando una capa personalizada en Keras que reciba dos entradas: una para la entrada variable y otra para la entrada fija. Durante el entrenamiento, la capa solo pasará la entrada variable a las capas siguientes e ignorará la entrada fija.
Aquí tienes un ejemplo de implementación de tal capa personalizada:
La capa recibe un parámetro
fixed_input
durante la inicialización y lo almacena como un tensor constante. En el métodocall
, la capa solo devuelve la primera entrada (es decir, la entrada variable) e ignora la segunda entrada (es decir, la entrada fija). El métodocompute_output_shape
simplemente devuelve la forma de la entrada variable.Para utilizar esta capa en la arquitectura de tu red neuronal, simplemente la insertas después de tu entrada fija y antes de tu entrada variable, de la siguiente manera:
Luego puedes entrenar tu modelo utilizando la entrada variable mientras mantienes la entrada fija.