Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

183
Vistas
¿Cómo usar funciones adicionales junto con incrustaciones de palabras en Keras?

Estoy entrenando un modelo LSTM con Keras en el conjunto de datos que se parece a lo siguiente. La variable "Descripción" es un campo de texto y "Edad" y "Género" son campos categóricos y continuos.

 Age, Gender, Description 22, M, "purchased a phone" 35, F, "shopping for kids"

Estoy usando incrustación de palabras para convertir los campos de texto en vectores de palabras y luego ingresarlo en el modelo de keras. El código se da a continuación:

 model = Sequential() model.add(Embedding(word_index, 300, weights=[embedding_matrix], input_length=70, trainable=False)) model.add(LSTM(300, dropout=0.3, recurrent_dropout=0.3)) model.add(Dropout(0.6)) model.add(Dense(1)) model.add(Activation('sigmoid')) model.compile(loss='binary_crossentropy', optimizer='adam', metrics['accuracy'])

Este modelo se está ejecutando correctamente, pero también quiero ingresar las variables "edad" y "género" como características. ¿Qué cambios se requieren en el código para usar estas funciones también?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Desea agregar más capas de entrada, lo que no es posible con el modelo secuencial, debe optar por un modelo funcional

 from keras.models import Model

lo que le permite tener múltiples entradas y conexiones indirectas.

 embed = Embedding(word_index, 300, weights=[embedding_matrix], input_length=70, trainable=False) lstm = LSTM(300, dropout=0.3, recurrent_dropout=0.3)(embed) agei = Input(shape=(1,)) conc = Concatenate()(lstm, agei) drop = Dropout(0.6)(conc) dens = Dense(1)(drop) acti = Activation('sigmoid')(dens) model = Model([embed, agei], acti) model.compile(loss='binary_crossentropy', optimizer='adam', metrics['accuracy'])

No puede concatenar antes de la capa LSTM ya que no tiene sentido y también tendrá un tensor 3D después de incrustar la capa y la entrada es un tensor 2D.

over 4 years ago · Santiago Trujillo Denunciar

0

Escribí sobre cómo hacer esto en keras . Es básicamente un modelo de entrada múltiple funcional, que concatena ambos vectores de funciones de esta manera:

 nlp_input = Input(shape=(seq_length,), name='nlp_input') meta_input = Input(shape=(10,), name='meta_input') emb = Embedding(output_dim=embedding_size, input_dim=100, input_length=seq_length)(nlp_input) nlp_out = Bidirectional(LSTM(128))(emb) x = concatenate([nlp_out, meta_input]) x = Dense(classifier_neurons, activation='relu')(x) x = Dense(1, activation='sigmoid')(x) model = Model(inputs=[nlp_input , meta_input], outputs=[x])
over 4 years ago · Santiago Trujillo Denunciar

0

Considere tener una red de avance separada que tome esas características y genere un vector n dimensional.

 time_independent = Input(shape=(num_features,)) dense_1 = Dense(200, activation='tanh')(time_independent) dense_2 = Dense(300, activation='tanh')(dense_1)

En primer lugar, utilice la API funcional de Keras para hacer algo como esto.

Luego, pasaría esto como el estado oculto del LSTM, o puede concatenarlo con cada palabra incrustada para que el lstm lo vea en cada paso de tiempo. En el último caso, querrá reducir drásticamente la dimensionalidad de la red.

Si necesitas un ejemplo, házmelo saber.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda