def inception_score(path_to_generated_imgs_dir,
                    path_to_generated_imgs_dir_cache, downsample_scale,
                    path_to_classifier, classifier_dimensionality,
                    cuda_enabled, batch_size, splits):
    # Set up data
    generated_brainpedia = Brainpedia(
        data_dirs=[path_to_generated_imgs_dir],
        cache_dir=path_to_generated_imgs_dir_cache,
        scale=downsample_scale,
        multi_tag_label_encoding=MULTI_TAG_LABEL_ENCODING)
    generated_brain_data_shape, generated_brain_data_tag_shape = generated_brainpedia.sample_shapes(
    )
    all_generated_brain_data, all_generated_brain_data_tags = generated_brainpedia.all_data(
    )
    all_generated_brain_data = Variable(torch.Tensor(all_generated_brain_data))

    if cuda_enabled:
        all_generated_brain_data = all_generated_brain_data.cuda()

    # Load classifier model
    classifier = Classifier(dimensionality=classifier_dimensionality,
                            num_classes=generated_brain_data_tag_shape[0],
                            cudaEnabled=cuda_enabled)
    classifier.load_state_dict(torch.load(path_to_classifier))

    # Compute predictions
    predictions = classifier.forward(
        all_generated_brain_data).data.cpu().numpy()

    # Now compute the mean kl-div
    N = len(all_generated_brain_data)
    split_scores = []

    for k in range(splits):
        part = predictions[k * (N // splits):(k + 1) * (N // splits), :]
        py = np.mean(part, axis=0)
        scores = []
        for i in range(part.shape[0]):
            pyx = part[i, :]
            scores.append(entropy(pyx, py))
        split_scores.append(np.exp(np.mean(scores)))

    return np.mean(split_scores), np.std(split_scores)