Issue title: `metrics=['accuracy']` works, `metrics=['Accuracy']` gives `ValueError: Shapes (None, 10) and (None, 1) are incompatible`
 Issue body: **System information**
- Have I written custom code (as opposed to using a stock example script provided in TensorFlow):
Use this example and just replace `'accuracy'` with `'Accuracy'` https://github.com/tensorflow/datasets/blob/8723d84/docs/keras_example.ipynb
- OS Platform and Distribution (e.g., Linux Ubuntu 16.04):
- Mobile device (e.g. iPhone 8, Pixel 2, Samsung Galaxy) if the issue happens on mobile device:
- TensorFlow installed from (source or binary):
- TensorFlow version (use command below): 2.3.0
- Python version: 3.8.5

**Describe the current behavior**
Error

**Describe the expected behavior**
No error. Looking here it doesn't appear they they are different:
https://www.tensorflow.org/api_docs/python/tf/keras/metrics
https://www.tensorflow.org/api_docs/python/tf/keras/metrics/Accuracy

Or is one the class and one an instance? - Should we be able to pass `'Accuracy'` as a string, or is the expected behaviour?

**Standalone code to reproduce the issue**
Use this example and just replace `'accuracy'` with `'Accuracy'` https://github.com/tensorflow/datasets/blob/8723d84/docs/keras_example.ipynb

**Other info / logs** Include any logs or source code that would be helpful to
diagnose the problem. If including tracebacks, please include the full
traceback. Large logs and files should be attached.
```
File "lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py", line 108, in _method_wrapper
    return method(self, *args, **kwargs)
  File "lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py", line 1098, in fit
    tmp_logs = train_function(iterator)
  File "lib/python3.8/site-packages/tensorflow/python/eager/def_function.py", line 780, in __call__
    result = self._call(*args, **kwds)
  File "lib/python3.8/site-packages/tensorflow/python/eager/def_function.py", line 823, in _call
    self._initialize(args, kwds, add_initializers_to=initializers)
  File "lib/python3.8/site-packages/tensorflow/python/eager/def_function.py", line 696, in _initialize
    self._stateful_fn._get_concrete_function_internal_garbage_collected(  # pylint: disable=protected-access
  File "lib/python3.8/site-packages/tensorflow/python/eager/function.py", line 2855, in _get_concrete_function_internal_garbage_collected
    graph_function, _, _ = self._maybe_define_function(args, kwargs)
  File "lib/python3.8/site-packages/tensorflow/python/eager/function.py", line 3213, in _maybe_define_function
    graph_function = self._create_graph_function(args, kwargs)
  File "lib/python3.8/site-packages/tensorflow/python/eager/function.py", line 3065, in _create_graph_function
    func_graph_module.func_graph_from_py_func(
  File "lib/python3.8/site-packages/tensorflow/python/framework/func_graph.py", line 986, in func_graph_from_py_func
    func_outputs = python_func(*func_args, **func_kwargs)
  File "lib/python3.8/site-packages/tensorflow/python/eager/def_function.py", line 600, in wrapped_fn
    return weak_wrapped_fn().__wrapped__(*args, **kwds)
  File "lib/python3.8/site-packages/tensorflow/python/framework/func_graph.py", line 973, in wrapper
    raise e.ag_error_metadata.to_exception(e)
ValueError: in user code:

    lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py:806 train_function  *
        return step_function(self, iterator)
    lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py:796 step_function  **
        outputs = model.distribute_strategy.run(run_step, args=(data,))
    lib/python3.8/site-packages/tensorflow/python/distribute/distribute_lib.py:1211 run
        return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
    lib/python3.8/site-packages/tensorflow/python/distribute/distribute_lib.py:2585 call_for_each_replica
        return self._call_for_each_replica(fn, args, kwargs)
    lib/python3.8/site-packages/tensorflow/python/distribute/distribute_lib.py:2945 _call_for_each_replica
        return fn(*args, **kwargs)
    lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py:789 run_step  **
        outputs = model.train_step(data)
    lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py:759 train_step
        self.compiled_metrics.update_state(y, y_pred, sample_weight)
    lib/python3.8/site-packages/tensorflow/python/keras/engine/compile_utils.py:409 update_state
        metric_obj.update_state(y_t, y_p, sample_weight=mask)
    lib/python3.8/site-packages/tensorflow/python/keras/utils/metrics_utils.py:90 decorated
        update_op = update_state_fn(*args, **kwargs)
    lib/python3.8/site-packages/tensorflow/python/keras/metrics.py:176 update_state_fn
        return ag_update_state(*args, **kwargs)
    lib/python3.8/site-packages/tensorflow/python/keras/metrics.py:612 update_state  **
        matches = ag_fn(y_true, y_pred, **self._fn_kwargs)
    lib/python3.8/site-packages/tensorflow/python/keras/metrics.py:3208 accuracy  **
        y_pred.shape.assert_is_compatible_with(y_true.shape)
    lib/python3.8/site-packages/tensorflow/python/framework/tensor_shape.py:1134 assert_is_compatible_with
        raise ValueError("Shapes %s and %s are incompatible" % (self, other))

    ValueError: Shapes (None, 10) and (None, 1) are incompatible
```
 Comments: 
 Comment 0: Hello, I would like to work on this issue, can  you explain me what are you expecting from this. Should I have to make it to case insensitive  or just put a warning/error.
 Comment 1: Was able to reproduce the issue in TF 2.3 and nightly version. Please find the gist [here](https://colab.research.google.com/gist/saikumarchalla/5c8d7694ffe4a3db2110f513d4805fb9/tensorflow-datasets.ipynb#scrollTo=XWqxdmS1NLKA).Thanks!
 Comment 2: @SamuelMarks I think you can pass 'accuracy' as well as 'Accuracy metric. Following toy example exhibits successful behavior.
```python
import tensorflow as tf
import numpy as np
inputs = tf.keras.layers.Input(shape=(3,))
outputs = tf.keras.layers.Dense(2)(inputs)
model = tf.keras.models.Model(inputs=inputs, outputs=outputs)
model.compile(optimizer="adam", loss="mse", metrics=["Accuracy"])

x = np.random.random((2, 3))
y = np.random.randint(0, 2, (2, 2))
model.fit(x, y)

print([m.name for m in model.metrics])
print(tf.__version__)
#Ouput:
1/1 [==============================] - 0s 282us/step - loss: 0.6162 - accuracy: 0.0000e+00
['loss', 'accuracy']
2.4.0-dev20200721
```
However the same logic fails in the example you are trying. Will investigate more. Thanks!
 Comment 3: Maybe it's because `metrics=['Accuracy']` means just plain `tf.keras.metrics.Accuracy` class. Since CIFAR-10 classifies images into 10 classes (as can be seen in [current tensorflow tutorial](https://www.tensorflow.org/tutorials/images/cnn)), metric should be categorical, for example, `tf.keras.metrics.SparseCategoricalAccuracy` class, or `'sparse_categorical_accuracy'`(The name of `tf.keras.metrics.SparseCategoricalAccuracy` class).

Below code should work, test in
- OS: Windows 10 Pro
- GPU: GTX 1660 Ti with MAX-Q design
- TF version: 2.3.1
- CUDA: 10.1
- cuDNN: 7.6.5

```python
import tensorflow as tf

from tensorflow.keras import datasets, layers, models

(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()

train_images, test_images = train_images / 255.0, test_images / 255.0

model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation=tf.keras.activations.relu, input_shape=(32, 32, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation=tf.keras.activations.relu))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation=tf.keras.activations.relu))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation=tf.keras.activations.relu))
model.add(layers.Dense(10))

model.summary()

model.compile(
    optimizer=tf.keras.optimizers.Adam(),
    loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
    metrics=[tf.keras.metrics.SparseCategoricalAccuracy()]
)

history = model.fit(train_images, train_labels, epochs=10,
                    validation_data=(test_images, test_labels))

test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)

print(test_acc)
```
If you change `metrics=[tf.keras.metrics.SparseCategoricalAccuracy()]` to `metrics=['Accuracy']` above code will not work, with the error `ValueError: Shapes (None, 10) and (None, 1) are incompatible`.

After searching some tensorflow code, found this comment:
(https://github.com/tensorflow/tensorflow/blob/9278b9421f64a2103d18a67d825a9b6be243e211/tensorflow/python/keras/engine/training.py, line 477 - 493)

> When you pass the strings 'accuracy' or 'acc', we convert this to one of `tf.keras.metrics.BinaryAccuracy`, `tf.keras.metrics.CategoricalAccuracy`, `tf.keras.metrics.SparseCategoricalAccuracy` based on the loss function used and the model output shape. We do a similar conversion for the strings 'crossentropy' and 'ce' as well.

This explains why `'accuracy'` works but `'Accuracy'` does not.

Hope this will help :)
 Comment 4: @SamuelMarks, have you seen the comment from @amoretspero? Let me know if this answers your question.
 Comment 5: This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you.

 Comment 6: Thanks @nikitamaia / @amoretspero yeah it does resolve the issue… but not the issue. I'm still left with no way to infer this behaviour for the code I generate https://github.com/SamuelMarks/ml-params-tensorflow/blob/4eea761/ml_params_tensorflow/ml_params/metrics.py

Should I just give up on having it work this way, or maybe implementing an `object` inheriting `class` which just constructs the relevant `Metric` would be in order?
 Comment 7: Adding the `contributions welcome` label to this issue for further investigation by the community. If you are interested in working on this issue, please leave a comment and I will assign it to you. Thanks!
 Comment 8: @SamuelMarks is this releated to https://github.com/tensorflow/tensorflow/issues/41361 or something different?
 Comment 9: @nikitamaia , Please assign this issue to me. I have worked on this and raised PR #49218 .
 Comment 10: Are you satisfied with the resolution of your issue?
<a href="https://docs.google.com/forms/d/e/1FAIpQLSfaP12TRhd9xSxjXZjcZFNXPGk4kc1-qMdv3gc6bEP90vY1ew/viewform?entry.85265664=Yes&entry.269.466.2999=https://github.com/tensorflow/tensorflow/issues/42383">Yes</a>
<a href="https://docs.google.com/forms/d/e/1FAIpQLSfaP12TRhd9xSxjXZjcZFNXPGk4kc1-qMdv3gc6bEP90vY1ew/viewform?entry.85265664=No&entry.269.466.2999=https://github.com/tensorflow/tensorflow/issues/42383">No</a>

 Comment 11: @SamuelMarks , You can confirm. The [gist](https://colab.research.google.com/gist/saikumarchalla/5c8d7694ffe4a3db2110f513d4805fb9/tensorflow-datasets.ipynb#scrollTo=XWqxdmS1NLKA) works normally now.
{'source': 'GithubIssues', 'repo_name_with_owner': 'tensorflow/tensorflow', 'issue_id': 679502425, 'repo_stars': 184749.0}