Source code for akida.sparsity

import numpy as np
from .core import LayerType
from .core import Model


[docs]def evaluate_sparsity(model, inputs): """Evaluate the sparsity of a Model on a set of inputs Args: model (:obj:`Model`): the model to evaluate inputs (:obj:`numpy.ndarray`): a numpy.ndarray Returns: a dictionary of float sparsity values indexed by layers """ sparsities = {} current_inputs = inputs for layer in model.layers: params = layer.parameters if params.layer_type != LayerType.InputData and layer.parameters.activation: sub_model = Model(layers=[layer]) current_inputs = sub_model.forward(current_inputs) output_size = np.prod(current_inputs.shape) activations = np.count_nonzero(current_inputs) sparsities[layer] = 1 - activations / output_size else: sparsities[layer] = None return sparsities