def build_elmo_model()

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