Exemplo n.º 1
0
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)