Esempio n. 1
0
    def apply_to_model(self, model, reference_weights, percentage):
        initial_weights_vector = utils.weights_to_vector(reference_weights)
        current_weights_vector = utils.weights_to_vector(
            utils.get_model_weights(model))
        diff_vector = np.abs(initial_weights_vector - current_weights_vector)
        mask_vector = self._ranker(diff_vector, percentage)

        last_idx = 0
        layer_masks = []
        reinitialized_layers = []
        for layer in model.layers:
            if len(layer.get_weights()) > 0:
                kernel, bias = layer.get_weights()[0], layer.get_weights()[1]
                kernel_mask = mask_vector[last_idx:last_idx +
                                          kernel.size].reshape(kernel.shape)
                last_idx += kernel.size
                bias_mask = mask_vector[last_idx:last_idx + bias.size].reshape(
                    bias.shape)
                last_idx += bias.size

                kernel_reinitialized = self._kernel_initializer(kernel.shape)
                bias_reinitialized = self._bias_initializer(bias.shape)

                new_kernel = np.copy(kernel)
                new_bias = np.copy(bias)

                new_kernel[kernel_mask] = kernel_reinitialized[kernel_mask]
                new_bias[bias_mask] = bias_reinitialized[bias_mask]

                layer.set_weights((new_kernel, new_bias))

                layer_masks.append([kernel_mask, bias_mask])
                reinitialized_layers.append(
                    [kernel_reinitialized, bias_reinitialized])
            else:
                layer_masks.append(None)
                reinitialized_layers.append(None)
        return layer_masks, reinitialized_layers
Esempio n. 2
0
    def apply_to_model(self, model, reference_weights, percentage):
        weights_vector = utils.weights_to_vector(
            utils.get_model_weights(model))
        mask_vector = self._ranker(weights_vector, percentage)

        last_idx = 0
        layer_masks = []
        reinitialized_layers = []
        for i in range(len(model.layers)):
            layer = model.layers[i]
            if len(layer.get_weights()) > 0:
                kernel, bias = layer.get_weights()[0], layer.get_weights()[1]
                kernel_mask = mask_vector[last_idx:last_idx +
                                          kernel.size].reshape(kernel.shape)
                last_idx += kernel.size
                bias_mask = mask_vector[last_idx:last_idx + bias.size].reshape(
                    bias.shape)
                last_idx += bias.size

                kernel_reinitialized = self._kernel_initializer(kernel.shape)
                bias_reinitialized = self._bias_initializer(bias.shape)

                new_kernel = np.copy(reference_weights[i][0])
                new_bias = np.copy(reference_weights[i][1])

                new_kernel[kernel_mask] = kernel_reinitialized[kernel_mask]
                new_bias[bias_mask] = bias_reinitialized[bias_mask]

                layer.set_weights((new_kernel, new_bias))

                layer_masks.append([kernel_mask, bias_mask])
                reinitialized_layers.append(
                    [kernel_reinitialized, bias_reinitialized])
            else:
                layer_masks.append(None)
                reinitialized_layers.append(None)
Esempio n. 3
0
 def __init__(self, model, reinitializer, mask=None, percentage=None):
     super().__init__(model, reinitializer, mask, percentage)
     self._reference_weights = utils.get_model_weights(self._model)
Esempio n. 4
0
 def reinitialize(self, percentage=None):
     if percentage is None:
         percentage = self._percentage
     self._reinitializer.apply_to_model(self._model,
                                        self._reference_weights, percentage)
     self._reference_weights = utils.get_model_weights(self._model)