<br />

|---|
| [![](https://www.tensorflow.org/images/GitHub-Mark-32px.png) View source on GitHub](https://github.com/tensorflow/probability/blob/v0.25.0/tensorflow_probability/python/math/numeric.py#L64-L96) |

Clips values to a specified min and max while leaving gradient unaltered.

    tfp.math.clip_by_value_preserve_gradient(
        t, clip_value_min, clip_value_max, name=None
    )

Like [`tf.clip_by_value`](https://www.tensorflow.org/api_docs/python/tf/clip_by_value), this function returns a tensor of the same type and
shape as input `t` but with values clamped to be no smaller than to
`clip_value_min` and no larger than `clip_value_max`. Unlike
[`tf.clip_by_value`](https://www.tensorflow.org/api_docs/python/tf/clip_by_value), the gradient is unaffected by this op, i.e.,

    tf.gradients(tfp.math.clip_by_value_preserve_gradient(x), x)[0]
    # ==> ones_like(x)

> [!NOTE]
> **Note:** `clip_value_min` needs to be smaller or equal to `clip_value_max` for correct results.

<br />

<br />

<br />

| ## Args ||
|---|---|
| `t` | A `Tensor`. |
| `clip_value_min` | A scalar `Tensor`, or a `Tensor` with the same shape as `t`. The minimum value to clip by. |
| `clip_value_max` | A scalar `Tensor`, or a `Tensor` with the same shape as `t`. The maximum value to clip by. |
| `name` | A name for the operation (optional). Default value: `'clip_by_value_preserve_gradient'`. |

<br />

<br />

<br />

<br />

| ## Returns ||
|---|---|
| `clipped_t` | A clipped `Tensor`. |

<br />