<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def visualize_activation_with_losses(input_tensor, losses, wrt_tensor=None, seed_input=None, input_range=(0, 255), **optimizer_params):
 """Generates the `input_tensor` that minimizes the weighted `losses`. This function is intended for advanced use cases where a custom loss is desired. Args: wrt_tensor: Short for, with respect to. The gradients of losses are computed with respect to this tensor. When None, this is assumed to be the same as `input_tensor` (Default value: None) losses: List of ([Loss](vis.losses#Loss), weight) tuples. seed_input: Seeds the optimization with a starting image. Initialized with a random value when set to None. (Default value = None) input_range: Specifies the input range as a `(min, max)` tuple. This is used to rescale the final optimized input to the given range. (Default value=(0, 255)) optimizer_params: The **kwargs for optimizer [params](vis.optimizer#optimizerminimize). Will default to reasonable values when required keys are not found. Returns: The model input that minimizes the weighted `losses`. """

    # Default optimizer kwargs.
    optimizer_params = utils.add_defaults_to_kwargs({
        'seed_input': seed_input,
        'max_iter': 200,
        'verbose': False
    }, **optimizer_params)

    opt = Optimizer(input_tensor, losses, input_range, wrt_tensor=wrt_tensor)
    img = opt.minimize(**optimizer_params)[0]

    # If range has integer numbers, cast to 'uint8'
    if isinstance(input_range[0], int) and isinstance(input_range[1], int):
        img = np.clip(img, input_range[0], input_range[1]).astype('uint8')

    if K.image_data_format() == 'channels_first':
        img = np.moveaxis(img, 0, -1)
    return img