Funkcja wewnętrznie używa do kumulowania partii elementów batch_size
, które są losowo próbkowane losowo z elementów znajdujących się aktualnie w kolejce.
Wiele algorytmów szkoleniowych, takich jak algorytmy oparte na stochastycznym gradiencie, które są używane przez TensorFlow do optymalizacji sieci neuronowych, polegają na losowych próbach rekordów z całego zestawu treningowego. Jednak nie zawsze praktyczne jest ładowanie całego zestawu treningowego do pamięci (w celu pobrania z niego próbki), więc tf.train.shuffle_batch()
oferuje kompromis: wypełnia wewnętrzny bufor między elementami min_after_dequeue
i capacity
, a próbki są losowo losowane z tego bufora. . W przypadku wielu procesów treningowych poprawia to dokładność modelu i zapewnia odpowiednią randomizację.
Argumenty min_after_dequeue
i capacity
mają pośredni wpływ na wyniki treningu. Ustawienie dużej wartości min_after_dequeue
opóźni rozpoczęcie treningu, ponieważ TensorFlow musi przetworzyć co najmniej tyle elementów, zanim rozpocznie się trening. Wartość capacity
jest górną granicą ilości pamięci zużywanej przez wejściowy potok: zbyt duże ustawienie może spowodować, że procesowi treningowemu zabraknie pamięci (i prawdopodobnie rozpocznie się zamiana, co obniży przepustowość treningu).
Jeśli zbiór danych zawiera tylko 200 obrazów, to z łatwością można załadować cały zbiór danych do pamięci. tf.train.shuffle_batch()
byłoby dość nieefektywne, ponieważ powoduje wielokrotne umieszczanie każdego obrazu i etykiety w pliku tf.RandomShuffleQueue
. W tym przypadku, może okazać się bardziej wydajne, aby wykonać następujące czynności zamiast korzystając tf.train.slice_input_producer()
i tf.train.batch()
:
random_image, random_label = tf.train.slice_input_producer([all_images, all_labels],
shuffle=True)
image_batch, label_batch = tf.train.batch([random_image, random_label],
batch_size=32)
Hi mrry, masz jakieś sugestie na to pytanie? Dzięki. – user288609