def get_strongest_filters(img_id, layer, top=3): filters = AlexNet.channels[layer] # Get activations for shortened model activation_img = AlexNet(layer).predict(get_path_from_id(img_id)) # Make sure that dimensions 2 and 3 are spacial (Image is square) assert activation_img.shape[2] == activation_img.shape[3], "Index ordering incorrect" assert activation_img.shape[1] == filters # Find maximum activation for each filter for a given image activation_img = np.nanmax(activation_img, axis=3) activation_img = np.nanmax(activation_img, axis=2) # Remove batch size dimension assert activation_img.shape[0] == 1 activation_img = activation_img.sum(0) # Make activations 1-based indexing activation_img = np.insert(activation_img, 0, 0.0) # activation_image is now a vector of length equal to number of filters (plus one for one-based indexing) # each entry corresponds to the maximum/summed activation of each filter for a given image top_filters = activation_img.argsort()[-top:] return list(top_filters)