# tf.data.experimental.shuffle_and_repeat

<br />

|---|
| [![](https://www.tensorflow.org/images/GitHub-Mark-32px.png) View source on GitHub](https://github.com/tensorflow/tensorflow/blob/v2.13.1/tensorflow/python/data/experimental/ops/shuffle_ops.py#L58-L112) |

Shuffles and repeats a Dataset, reshuffling with each repetition. (deprecated)

#### View aliases


**Compat aliases for migration**

See
[Migration guide](https://www.tensorflow.org/guide/migrate) for
more details.

[`tf.compat.v1.data.experimental.shuffle_and_repeat`](https://www.tensorflow.org/api_docs/python/tf/data/experimental/shuffle_and_repeat)

<br />

    tf.data.experimental.shuffle_and_repeat(
        buffer_size, count=None, seed=None
    )

> [!WARNING]
> **Deprecated:** THIS FUNCTION IS DEPRECATED. It will be removed in a future version. Instructions for updating: Use [`tf.data.Dataset.shuffle(buffer_size, seed)`](https://www.tensorflow.org/versions/r2.13/api_docs/python/tf/data/Dataset#shuffle) followed by [`tf.data.Dataset.repeat(count)`](https://www.tensorflow.org/versions/r2.13/api_docs/python/tf/data/Dataset#repeat). Static tf.data optimizations will take care of using the fused implementation.

    d = tf.data.Dataset.from_tensor_slices([1, 2, 3])
    d = d.apply(tf.data.experimental.shuffle_and_repeat(2, count=2))
    [elem.numpy() for elem in d] # doctest: +SKIP
    [2, 3, 1, 1, 3, 2]

    dataset.apply(
      tf.data.experimental.shuffle_and_repeat(buffer_size, count, seed))

produces the same output as

    dataset.shuffle(
      buffer_size, seed=seed, reshuffle_each_iteration=True).repeat(count)

In each repetition, this dataset fills a buffer with `buffer_size` elements,
then randomly samples elements from this buffer, replacing the selected
elements with new elements. For perfect shuffling, set the buffer size equal
to the full size of the dataset.

For instance, if your dataset contains 10,000 elements but `buffer_size` is
set to 1,000, then `shuffle` will initially select a random element from
only the first 1,000 elements in the buffer. Once an element is selected,
its space in the buffer is replaced by the next (i.e. 1,001-st) element,
maintaining the 1,000 element buffer.

<br />

<br />

<br />

| ## Args ||
|---|---|
| `buffer_size` | A [`tf.int64`](https://www.tensorflow.org/versions/r2.13/api_docs/python/tf#int64) scalar [`tf.Tensor`](https://www.tensorflow.org/versions/r2.13/api_docs/python/tf/Tensor), representing the maximum number elements that will be buffered when prefetching. |
| `count` | (Optional.) A [`tf.int64`](https://www.tensorflow.org/versions/r2.13/api_docs/python/tf#int64) scalar [`tf.Tensor`](https://www.tensorflow.org/versions/r2.13/api_docs/python/tf/Tensor), representing the number of times the dataset should be repeated. The default behavior (if `count` is `None` or `-1`) is for the dataset be repeated indefinitely. |
| `seed` | (Optional.) A [`tf.int64`](https://www.tensorflow.org/versions/r2.13/api_docs/python/tf#int64) scalar [`tf.Tensor`](https://www.tensorflow.org/versions/r2.13/api_docs/python/tf/Tensor), representing the random seed that will be used to create the distribution. See [`tf.random.set_seed`](https://www.tensorflow.org/versions/r2.13/api_docs/python/tf/random/set_seed) for behavior. |

<br />

<br />

<br />

<br />

| ## Returns ||
|---|---|
| A `Dataset` transformation function, which can be passed to [`tf.data.Dataset.apply`](https://www.tensorflow.org/versions/r2.13/api_docs/python/tf/data/Dataset#apply). ||

<br />