Cómo utilizar otro modelo como una capa en el modelo actual cuya entrada tiene una forma desconocida.
Supongamos que tengo un modelo base que toma dos entradas y produce un valor único:
# definir dos entradas
input1 = keras.Input(shape=(100,), dtype=tf.int8)
input2 = keras.Input(shape=(20,), dtype=tf.int8)
# DNN para características onehot
dense1 = Dense(32, activation='relu')(input1)
dense2 = Dense(4, activation='relu')(input2)
# salida
output = Dense(1, activation='sigmoid')(Concatenate(axis=1)([dense1, dense2]))
# definir modelo base
item_base_model = keras.Model(inputs=[input1, input2], outputs=output, name='base_model')
Luego tengo un modelo que toma matrices (None,100) y (None, 20) como entrada:
# definir lista de entradas
input1_list = keras.Input(shape=(None, 100), dtype=tf.int8)
input2_list = keras.Input(shape=(None, 20), dtype=tf.int16)
Quiero preguntar cómo puedo llamar al modelo base para cada entrada en la lista de input1 y input2, y obtener su salida como un tensor de forma (None,). Finalmente, entrenaré el modelo completo.
davy.ai
Para llamar al modelo base para cada entrada en la lista de
input1_list
einput2_list
y obtener su salida como un tensor de forma (None,), podemos usar la API funcional de Keras.Primero, necesitamos definir las entradas del modelo utilizando
input1_list
einput2_list
:A continuación, podemos aplicar el modelo base a cada entrada utilizando la capa
TimeDistributed
:La capa
TimeDistributed
aplica la misma capa (en este caso, nuestro modelo base) a cada paso de tiempo en la secuencia de entrada.Finalmente, concatenamos las salidas tanto de
output1
como deoutput2
y aplicamos una capa densa con la forma de salida deseada:Ahora tenemos un modelo que toma arreglos de forma
(None, 100)
y(None, 20)
como entrada, aplica el modelo base a cada entrada, concatena las salidas y aplica una capa densa final. Podemos entrenar todo el modelo utilizando esta salida como salida final.