Insert the new_layer after layer, whose position is layer_idx. The new layer's
        parameter is stored in a Keras layer called new_keras_layer

def _insert_layer_after(self, layer_idx, new_layer, new_keras_layer):
        """
        Insert the new_layer after layer, whose position is layer_idx. The new layer's
        parameter is stored in a Keras layer called new_keras_layer
        """
        # reminder: new_keras_layer is not part of the original Keras network,
        # so it's input / output blob information is missing. It serves only as
        # a parameter holder.
        layer = self.layer_list[layer_idx]
        self.layer_list.insert(layer_idx+1, new_layer)
        self.keras_layer_map[new_layer] = new_keras_layer
        successors = self.get_successors(layer)
        # add edge layer -> new_layer
        self._add_edge(layer, new_layer)
        # add edges new_layer -> layer_successor, remove layer -> successor
        for succ in successors:
            self._add_edge(new_layer, succ)
            self._remove_edge(layer, succ)