(samples, queue_size)
Shuffles a sample stream using a random-out next-in queue of given size.

  Args:
    samples: Stream of samples for eventual use as training data or eval data.
    queue_size: Minimum number of samples within which the streamed shuffling
        takes place.

  Yields:
    Shuffled stream of samples, ready for further processing, e.g., grouping
    into batches.
Shuffles a sample stream using a random-out next-in queue of given size.
Shuffles a sample stream using a random - out next - in queue of given size .
def shuffle(samples, queue_size):
  """Shuffles a sample stream using a random-out next-in queue of given size.

  Args:
    samples: Stream of samples for eventual use as training data or eval data.
    queue_size: Minimum number of samples within which the streamed shuffling
        takes place.

  Yields:
    Shuffled stream of samples, ready for further processing, e.g., grouping
    into batches.
  """
  if queue_size < 1:
    raise ValueError(f'Arg queue_size ({queue_size}) is less than 1.')
  if queue_size == 1:
    logging.warning('Queue size of 1 results in no shuffling.')
  queue = []
  try:
    # Prep: fill the queue.
    for _ in range(queue_size):
      queue.append(next(samples))

    # Core streaming shuffle: yield sample from random location in queue, then
    # fill that location with new sample from input stream.
    for sample in samples:
      i = np.random.randint(queue_size)
      yield queue[i]
      queue[i] = sample
  except StopIteration:
    # Only get here if the initial queue fill fails.
    logging.warning(
        'Not enough samples (%d) to fill initial queue (size %d).',
        len(queue), queue_size)

  # No new samples coming in; shuffle and drain the queue.
  np.random.shuffle(queue)
  for sample in queue:
    yield sample
def shuffle ( samples , queue_size ) : if queue_size < 1 : raise ValueError ( f'Arg queue_size ({queue_size}) is less than 1.' ) if queue_size == 1 : logging . warning ( 'Queue size of 1 results in no shuffling.' ) queue = [ ] try : # Prep: fill the queue. for _ in range ( queue_size ) : queue . append ( next ( samples ) ) # Core streaming shuffle: yield sample from random location in queue, then # fill that location with new sample from input stream. for sample in samples : i = np . random . randint ( queue_size ) yield queue [ i ] queue [ i ] = sample except StopIteration : # Only get here if the initial queue fill fails. logging . warning ( 'Not enough samples (%d) to fill initial queue (size %d).' , len ( queue ) , queue_size ) # No new samples coming in; shuffle and drain the queue. np . random . shuffle ( queue ) for sample in queue : yield sample