2016-09-02 23 views
17

W Tensorflow tutorial, daje następujący przykład dotyczące tf.train.shuffle_batch():Jeśli chodzi o wykorzystanie tf.train.shuffle_batch() w celu utworzenia partii

# Creates batches of 32 images and 32 labels. 
image_batch, label_batch = tf.train.shuffle_batch(
    [single_image, single_label], 
    batch_size=32, 
    num_threads=4, 
    capacity=50000, 
    min_after_dequeue=10000) 

nie jestem bardzo jasne, o znaczeniu capacity i min_after_dequeue. W tym przykładzie jest ustawiony odpowiednio jako 50000 i 10000. Jaka jest logika tego rodzaju konfiguracji lub co to oznacza. Jeśli dane wejściowe mają 200 obrazów i 200 etykiet, co się stanie?

+0

Hi mrry, masz jakieś sugestie na to pytanie? Dzięki. – user288609

Odpowiedz

20

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) 
Powiązane problemy