validate clip_norm argument in clip_by_norm API
Here are the internal errors, @SuryanarayanaY can you please verify ? Thank you!

Traceback (most recent call last):
  File "/tensorflow/python/ops/math_ops.py", line 1486, in binary_op_wrapper
    out = r_op(x)
  File "/tensorflow/python/util/traceback_utils.py", line 141, in error_handler
    return fn(*args, **kwargs)
  File "/tensorflow/python/ops/math_ops.py", line 1509, in r_binary_op_wrapper
    y, x = maybe_promote_tensors(y, x, force_same_dtype=True)
  File "/tensorflow/python/ops/math_ops.py", line 1441, in maybe_promote_tensors
    ops.convert_to_tensor(tensor, dtype, name="x"))
  File "/tensorflow/python/profiler/trace.py", line 183, in wrapped
    return func(*args, **kwargs)
  File "/tensorflow/python/framework/ops.py", line 701, in convert_to_tensor
    return tensor_conversion_registry.convert(
  File "/tensorflow/python/framework/tensor_conversion_registry.py", line 209, in convert
    return overload(dtype, name)  #  pylint: disable=not-callable
  File "/tensorflow/python/framework/tensor.py", line 762, in __tf_tensor__
    raise ValueError(
ValueError: x: Tensor conversion requested dtype float32 for Tensor with dtype float64: <tf.Tensor 'embedding_lookup:0' shape=() dtype=float64>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/tensorflow/python/framework/test_util.py", line 1634, in decorated
    return f(self, *args, **kwargs)
  File "/tensorflow/python/kernel_tests/nn_ops/embedding_ops_test.py", line 584, in testHigherRankMaxNorm
    simple = embedding_ops.embedding_lookup(params, ids, max_norm=1.0)
  File "/tensorflow/python/util/traceback_utils.py", line 141, in error_handler
    return fn(*args, **kwargs)
  File "/tensorflow/python/util/dispatch.py", line 1260, in op_dispatch_handler
    return dispatch_target(*args, **kwargs)
  File "/tensorflow/python/ops/embedding_ops.py", line 326, in embedding_lookup
    return _embedding_lookup_and_transform(
  File "/tensorflow/python/ops/embedding_ops.py", line 144, in _embedding_lookup_and_transform
    result = _clip(
  File "/tensorflow/python/ops/embedding_ops.py", line 73, in _clip
    return clip_ops.clip_by_norm(
  File "/tensorflow/python/util/traceback_utils.py", line 141, in error_handler
    return fn(*args, **kwargs)
  File "/tensorflow/python/util/dispatch.py", line 1260, in op_dispatch_handler
    return dispatch_target(*args, **kwargs)
  File "/tensorflow/python/ops/clip_ops.py", line 223, in clip_by_norm
    intermediate = values * clip_norm
  File "/tensorflow/python/util/traceback_utils.py", line 141, in error_handler
    return fn(*args, **kwargs)
  File "/tensorflow/python/ops/math_ops.py", line 1491, in binary_op_wrapper
    raise e
  File "/tensorflow/python/ops/math_ops.py", line 1475, in binary_op_wrapper
    return func(x, y, name=name)
  File "/tensorflow/python/ops/math_ops.py", line 1856, in _mul_dispatch
    return multiply(x, y, name=name)
  File "/tensorflow/python/util/traceback_utils.py", line 141, in error_handler
    return fn(*args, **kwargs)
  File "/tensorflow/python/util/dispatch.py", line 1260, in op_dispatch_handler
    return dispatch_target(*args, **kwargs)
  File "/tensorflow/python/ops/math_ops.py", line 529, in multiply
    return gen_math_ops.mul(x, y, name)
  File "/tensorflow/python/ops/gen_math_ops.py", line 6590, in mul
    _, _, _op, _outputs = _op_def_library._apply_op_helper(
  File "/tensorflow/python/framework/op_def_library.py", line 778, in _apply_op_helper
    _ExtractInputsAndAttrs(op_type_name, op_def, allowed_list_attr_map,
  File "/tensorflow/python/framework/op_def_library.py", line 589, in _ExtractInputsAndAttrs
    raise TypeError(
TypeError: Input 'y' of 'Mul' Op has type float32 that does not match type float64 of argument 'x'. This PR is stale because it has been open for 14 days with no activity. It will be closed if no further activity occurs. Thank you. Hi @SuryanarayanaY Any update on this PR? Please. Thank you! I have gone through the error stack and root cause is as below.

> File "/tensorflow/python/kernel_tests/nn_ops/embedding_ops_test.py", line 584, in testHigherRankMaxNorm
> simple = embedding_ops.embedding_lookup(params, ids, max_norm=1.0)

In the above test the `params` is `float64` and max_norm=1.0 which are then passed to `clip_by_norm()` as `t` and `clip_norm` respectively. 

> 
> File "/tensorflow/python/ops/clip_ops.py", line 223, in clip_by_norm
> intermediate = values * clip_norm

Then in the above line of code `t` is converted to `values ` as `float64` tensor and `clip_norm=1.0`
```
values = ops.convert_to_tensor(
        t.values if isinstance(t, indexed_slices.IndexedSlices) else t,
        name="t")
```

With the proposed amendment `clip_norm = math_ops.maximum(clip_norm, 0)`, the `clip_norm` becoming float32 tensor and this is causing the error and test fail. Without modification it remains as 1.0 and hence `values * clip_norm` works fine here.

One observation is the args `t` and `clip_norm` of API `tf.clip_by_norm` both the args should be of same dtype else exception will be raised which is also not documented.

My proposed solution is:

```
clip_norm = tf.cast(math_ops.maximum(clip_norm, 0),dtype = values.dtype)
```

which can validate -ve inputs, resolves the issue mentioned above regarding dtype of `t` and `clip_norm` and it also eliminates testfail.

I have added a [gist](https://colab.sandbox.google.com/gist/SuryanarayanaY/f01ac87fc5e19aebca7be360adef2ae2/clip_by_norm-pr-61242.ipynb) for above exercise for reference.

@cantonios , Needs your review and comments for proceeding.



 Hi @cantonios, Can you please review this PR ? Thank you! Hi @cantonios, Can you please review this PR ? Thank you! Hi @SuryanarayanaY Can you please check @cantonios's [comments](https://github.com/tensorflow/tensorflow/pull/61242#discussion_r1344461449) and keep us posted ? Thank you!
The API `clip_by_norm` have argument `clip_norm` which accepts  `0-D (scalar) `Tensor` > 0` . But if we pass `-ve` value for this argument then its not raising intended error and converting the input tensor into Negative which IMO is wrong. Hence I am adding validation code for -ve values to `raise value error`.

Attaching [gist](https://colab.research.google.com/gist/SuryanarayanaY/650edf2e880caa947674f813a41ef5a8/61158_-code-fix-ve-values.ipynb) for the same with solution for reference.

Fixex #61158  