Exemplo n.º 1
0
def get_strongest_filter(img_id, layer):
    filters = AlexNet.channels[layer]
    path = get_path_from_id(img_id)

    # Get activations for shortened model
    activation_img = AlexNet(layer).predict(path)

    # 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

    return activation_img.argmax()