es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para llamar al modelo base para cada entrada en la lista de input1_list e input2_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 e input2_list:

    input1_list = keras.Input(shape=(None, 100,), dtype=tf.int8)
    input2_list = keras.Input(shape=(None, 20,), dtype=tf.int16)
    

    A continuación, podemos aplicar el modelo base a cada entrada utilizando la capa TimeDistributed:

    output1 = TimeDistributed(item_base_model)(input1_list)
    output2 = TimeDistributed(item_base_model)(input2_list)
    

    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 de output2 y aplicamos una capa densa con la forma de salida deseada:

    concat_output = Concatenate(axis=1)([output1, output2])
    final_output = Dense(1, activation='sigmoid')(concat_output)
    

    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.

Comments are closed.