in question_generation_model.py [0:0]
def build_elmo_model(self):
"""
Build model definition using ELMO embeddings and image input
TODO: This model is throwing out garbage words. Maybe because Lamba layer in untrainable.
:return:
"""
self.logger.info('Building elmo model')
# image feature
inputs1 = Input(shape=(self.input_shape,))
fe1 = Dropout(self.dropout)(inputs1)
fe2 = layers.Dense(self.hidden_units, activation='relu')(fe1)
# partial question sequence model
inputs2 = Input(shape=(1,), dtype="string")
self.logger.info('Building elmo model 2')
se1 = Lambda(ELMoEmbedding)(inputs2)
# se1 = ElmoEmbeddingLayer(pooling='first', trainable=False)(inputs2)
self.logger.info('Building elmo model 3')
se2 = Dropout(self.dropout)(se1)
question_seq_model = LSTM(self.hidden_units)(se2)
self.logger.info('Building elmo model 3')
# decoder (feed forward) model
decoder1 = Add()([fe2, question_seq_model])
self.logger.info('Building elmo model 4')
decoder2 = layers.Dense(self.hidden_units, activation='relu')(decoder1)
ge1 = Dropout(self.dropout)(decoder2)
outputs = layers.Dense(self.vocab_size, activation='softmax')(ge1)
print('Output:', outputs)
self.logger.info('Building elmo model 5')
# merge the two input models
model = Model(inputs=[inputs1, inputs2], outputs=outputs)
model.summary()
optimizer = Adam(lr=0.0001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False)
#TODO: try different optimizer?
model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy'])
self.logger.info('Elmo model succesfully built')
return model