Ejemplo n.º 1
0
    def test_neuron_indices_to_target_var_u_net(self):
        """Ensures correct output from neuron_indices_to_target_var.

        In this case, neural-net type is U-net.
        """

        num_tests = len(U_NET_NEURON_INDICES_LIST)

        for i in range(num_tests):
            this_target_name, this_height_m_agl = (
                neural_net.neuron_indices_to_target_var(
                    neuron_indices=U_NET_NEURON_INDICES_LIST[i],
                    example_dict=copy.deepcopy(EXAMPLE_DICT),
                    net_type_string=neural_net.U_NET_TYPE_STRING))

            self.assertTrue(this_target_name == U_NET_TARGET_NAMES[i])
            self.assertTrue(this_height_m_agl == U_NET_HEIGHTS_M_AGL[i])
Ejemplo n.º 2
0
def _run(model_file_name, example_file_name, num_examples, example_dir_name,
         example_id_file_name, layer_name, is_layer_output, neuron_indices,
         ideal_activation, output_file_name):
    """Makes saliency map for each example, according to one model.

    This is effectively the main method.

    :param model_file_name: See documentation at top of file.
    :param example_file_name: Same.
    :param num_examples: Same.
    :param example_dir_name: Same.
    :param example_id_file_name: Same.
    :param layer_name: Same.
    :param is_layer_output: Same.
    :param neuron_indices: Same.
    :param ideal_activation: Same.
    :param output_file_name: Same.
    """

    print('Reading model from: "{0:s}"...'.format(model_file_name))
    model_object = neural_net.read_model(model_file_name)

    metafile_name = neural_net.find_metafile(
        model_dir_name=os.path.split(model_file_name)[0],
        raise_error_if_missing=True
    )

    print('Reading metadata from: "{0:s}"...'.format(metafile_name))
    metadata_dict = neural_net.read_metafile(metafile_name)

    predictor_matrix, _, example_id_strings = (
        misc_utils.get_examples_for_inference(
            model_metadata_dict=metadata_dict,
            example_file_name=example_file_name,
            num_examples=num_examples, example_dir_name=example_dir_name,
            example_id_file_name=example_id_file_name
        )
    )
    print(SEPARATOR_STRING)

    generator_option_dict = metadata_dict[neural_net.TRAINING_OPTIONS_KEY]

    if is_layer_output:
        dummy_example_dict = {
            example_utils.SCALAR_TARGET_NAMES_KEY:
                generator_option_dict[neural_net.SCALAR_TARGET_NAMES_KEY],
            example_utils.VECTOR_TARGET_NAMES_KEY:
                generator_option_dict[neural_net.VECTOR_TARGET_NAMES_KEY],
            example_utils.HEIGHTS_KEY:
                generator_option_dict[neural_net.HEIGHTS_KEY]
        }

        target_field_name, target_height_m_agl = (
            neural_net.neuron_indices_to_target_var(
                neuron_indices=neuron_indices,
                example_dict=copy.deepcopy(dummy_example_dict),
                net_type_string=metadata_dict[neural_net.NET_TYPE_KEY]
            )
        )
    else:
        target_field_name = None
        target_height_m_agl = None

    print('Target field and height = {0:s}, {1:s}'.format(
        str(target_field_name), str(target_height_m_agl)
    ))

    print('Computing saliency for neuron {0:s} in layer "{1:s}"...'.format(
        str(neuron_indices), layer_name
    ))
    saliency_matrix = saliency.get_saliency_one_neuron(
        model_object=model_object, predictor_matrix=predictor_matrix,
        layer_name=layer_name, neuron_indices=neuron_indices,
        ideal_activation=ideal_activation
    )

    net_type_string = metadata_dict[neural_net.NET_TYPE_KEY]

    if net_type_string == neural_net.DENSE_NET_TYPE_STRING:
        dummy_example_dict = {
            example_utils.SCALAR_PREDICTOR_NAMES_KEY:
                generator_option_dict[neural_net.SCALAR_PREDICTOR_NAMES_KEY],
            example_utils.VECTOR_PREDICTOR_NAMES_KEY:
                generator_option_dict[neural_net.VECTOR_PREDICTOR_NAMES_KEY],
            example_utils.HEIGHTS_KEY:
                generator_option_dict[neural_net.HEIGHTS_KEY]
        }

        dummy_example_dict = neural_net.predictors_numpy_to_dict(
            predictor_matrix=saliency_matrix, example_dict=dummy_example_dict,
            net_type_string=metadata_dict[neural_net.NET_TYPE_KEY]
        )
        scalar_saliency_matrix = (
            dummy_example_dict[example_utils.SCALAR_PREDICTOR_VALS_KEY]
        )
        vector_saliency_matrix = (
            dummy_example_dict[example_utils.VECTOR_PREDICTOR_VALS_KEY]
        )
    else:
        num_scalar_predictors = len(
            generator_option_dict[neural_net.SCALAR_PREDICTOR_NAMES_KEY]
        )
        scalar_saliency_matrix = saliency_matrix[..., -num_scalar_predictors:]
        vector_saliency_matrix = saliency_matrix[..., :-num_scalar_predictors]

    print('Writing saliency maps to: "{0:s}"...'.format(output_file_name))
    saliency.write_file(
        netcdf_file_name=output_file_name,
        scalar_saliency_matrix=scalar_saliency_matrix,
        vector_saliency_matrix=vector_saliency_matrix,
        example_id_strings=example_id_strings, model_file_name=model_file_name,
        layer_name=layer_name, neuron_indices=neuron_indices,
        ideal_activation=ideal_activation, target_field_name=target_field_name,
        target_height_m_agl=target_height_m_agl
    )
Ejemplo n.º 3
0
def _run(gradcam_file_name, use_log_scale, prediction_file_name,
         output_dir_name):
    """Plots Grad-CAM output (class-activation maps).

    This is effectively the main method.

    :param gradcam_file_name: See documentation at top of file.
    :param use_log_scale: Same.
    :param prediction_file_name: Same.
    :param output_dir_name: Same.
    """

    file_system_utils.mkdir_recursive_if_necessary(
        directory_name=output_dir_name
    )

    print('Reading class-activation maps from: "{0:s}"...'.format(
        gradcam_file_name
    ))
    gradcam_dict = gradcam.read_file(gradcam_file_name)

    example_id_strings = gradcam_dict[gradcam.EXAMPLE_IDS_KEY]
    output_neuron_indices = gradcam_dict[gradcam.OUTPUT_NEURONS_KEY]
    model_file_name = gradcam_dict[gradcam.MODEL_FILE_KEY]
    model_metafile_name = neural_net.find_metafile(
        model_dir_name=os.path.split(model_file_name)[0]
    )

    print('Reading model metadata from: "{0:s}"...'.format(model_metafile_name))
    model_metadata_dict = neural_net.read_metafile(model_metafile_name)
    generator_option_dict = model_metadata_dict[neural_net.TRAINING_OPTIONS_KEY]

    dummy_example_dict = {
        example_utils.VECTOR_TARGET_NAMES_KEY:
            generator_option_dict[neural_net.VECTOR_TARGET_NAMES_KEY],
        example_utils.HEIGHTS_KEY: generator_option_dict[neural_net.HEIGHTS_KEY]
    }

    target_field_name, target_height_m_agl = (
        neural_net.neuron_indices_to_target_var(
            neuron_indices=output_neuron_indices,
            example_dict=dummy_example_dict,
            net_type_string=model_metadata_dict[neural_net.NET_TYPE_KEY]
        )
    )

    predicted_target_values, actual_target_values = (
        plot_saliency_maps._get_target_values(
            prediction_file_name=prediction_file_name,
            model_metadata_dict=model_metadata_dict,
            example_id_strings=example_id_strings,
            target_field_name=target_field_name,
            target_height_m_agl=target_height_m_agl
        )
    )

    print(SEPARATOR_STRING)
    num_examples = len(example_id_strings)

    for i in range(num_examples):
        this_title_string = 'Actual and predicted {0:s}'.format(
            target_field_name
        )

        if target_height_m_agl is not None:
            this_title_string += ' at {0:.2f} km AGL'.format(
                METRES_TO_KM * target_height_m_agl
            )

        this_title_string += ' = {0:.2f}, {1:.2f}'.format(
            actual_target_values[i], predicted_target_values[i]
        )

        _plot_one_example(
            gradcam_dict=gradcam_dict, example_index=i,
            model_metadata_dict=model_metadata_dict, use_log_scale=use_log_scale,
            title_string=this_title_string, output_dir_name=output_dir_name
        )