Aprendizaje multitarea en Keras

12

Estoy tratando de implementar capas compartidas en Keras. Veo que Keras sí keras.layers.concatenate, pero no estoy seguro de la documentación sobre su uso. ¿Puedo usarlo para crear múltiples capas compartidas? ¿Cuál sería la mejor manera de implementar una red neuronal compartida simple como se muestra a continuación utilizando Keras?Red neuronal compartida

Tenga en cuenta que todas las formas de entrada, salida y capas compartidas para los 3 NN son iguales. Hay varias capas compartidas (y capas no compartidas) en las tres NN. Las capas de colores son exclusivas de cada NN y tienen la misma forma.

Básicamente, la figura representa 3 NN idénticos con múltiples capas ocultas compartidas, seguidas de múltiples capas ocultas no compartidas.

No estoy seguro de cómo compartir varias capas, ya que en el ejemplo de Twitter, solo había una capa compartida (ejemplo en API doc).

Aditya
fuente

Respuestas:

10

Input xDenseDense

x = Input(shape=(n, ))
shared = Dense(32)(x)
sub1 = Dense(16)(shared)
sub2 = Dense(16)(shared)
sub3 = Dense(16)(shared)
out1 = Dense(1)(sub1)
out2 = Dense(1)(sub2)
out3 = Dense(1)(sub3)

Podemos definir nuestro modelo ahora así:

model = Model(inputs=x, outputs=[out1, out2, out3])

Ahora esperará una tupla / lista de tres elementos, uno para cada salida.

Puedes ir mucho más lejos con estos conceptos. Digamos que nos gustaría aprender pesos individuales para las capas de personas pero aún queremos tener los mismos pesos para la combinación lineal hacia la capa de salida, podríamos lograrlo haciendo esto:

out = Dense(1)
out1 = out(sub1)
out2 = out(sub2)
out3 = out(sub3)

EDITAR: la concatenación es básicamente lo contrario de lo que desea hacer, es pegar salidas (intermedias) de diferentes partes de su red en una nueva capa. En realidad, desea dividirse en varias partes diferentes.

Jan van der Vegt
fuente
Muchas gracias. Cuando hacemos un model.fit([data1, data2], [labels1, labels2]), este será entrenado (la propagación hacia atrás) como un modelo único, ¿verdad?
Aditya
1
Sí, solo será una cosa, si las etiquetas tienen diferentes pérdidas asociadas, tendrá que hacer un poco más de trabajo, no es súper fácil en Keras, pero no imposible, si comparten la misma función de pérdida sin volver a pesar, simplemente funciona de inmediato
Jan van der Vegt
Esto requeriría volver a entrenar el modelo unificado. ¿Qué pasa si ya tiene los pesos de entrenamiento para los submodelos? ¿Hay alguna forma de usar esos pesos para crear las dimensiones del modelo combinado?
shahar_m 01 de
@shahar_m lo siento, no estoy seguro de cuál es el caso de uso. Si los pesos de entrenamiento del modelo unificado son fijos, puede cargar y congelar esas capas.
Aditya