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)