def get_captioning_encoder(config):
    """Get captinoning model's encoder based on config."""
    if config['name'] == 'state':
        return MLPEncoder(embedding_dim=config['embedding_dim'],
                          name='captioning_encoder',
                          subtract_neighboring_observation=True)
    elif config['name'] == 'image':
        return CNNEncoder(embedding_dim=config['embedding_dim'],
                          name='captioning_encoder')
    else:
        raise ValueError('Unrecognized model type: {}'.format(config['name']))
def get_answering_encoder(config):
    """Get answering model's encoder based on config."""
    if config['name'] == 'state':
        return MLPEncoder(embedding_dim=config['embedding_dim'],
                          name='answering_encoder')
    elif config['name'] == 'state-film':
        return tf.keras.layers.Lambda(lambda x: x)
    elif config['name'] == 'image':
        return CNNEncoderSingleFrame(embedding_dim=config['embedding_dim'],
                                     name='answering_encoder')
    else:
        raise ValueError('Unrecognized model type: {}'.format(config['name']))