Rozumiem, że dobrą praktyką jest tasowanie próbek treningowych dla każdej epoki, tak aby każda mini-partia zawierała ładną losową próbkę całego zestawu danych. Jeśli przekonwertuję cały zestaw danych na pojedynczy plik zawierający TFRecords, to w jaki sposób można osiągnąć to szuranie przed załadowaniem całego zestawu danych? Rozumiem, że nie ma efektywnego dostępu do plików TFRecord. Tak więc, aby być konkretnym, szukam wskazówek, w jaki sposób pliki TFRecord są używane w tym scenariuszu.TFRecords i tasowanie rekordów
Odpowiedz
Nie można - można nieco poprawić miksowanie, dzieląc dane wejściowe na wiele plików danych wejściowych, a następnie traktując je jako as explained in this answer.
Jeśli potrzebujesz czegoś zbliżonego do "doskonałego" tasowania, musisz go wczytać do pamięci, ale w praktyce dla większości rzeczy, prawdopodobnie dostaniesz "wystarczająco dobre" tasowanie, dzieląc się na 100 lub 1000 plików i następnie za pomocą kolejki losowej, która jest wystarczająco duża, aby pomieścić dane o wartości 8-16 plików.
Mam swędzenie w tyle głowy, aby napisać losową losową kolejkę losową, która może przelać się na dysk, ale jest bardzo niska na mojej liście priorytetów - jeśli ktoś chciałby ją wnieść, wolę przejrzeć to. :)
Jak leci swędzenie? +1 – TimZaman
Teraz już nie musisz się martwić tasowaniem przed zapisaniem do TFRecords. To dlatego, że (obecnie) zalecana metoda odczytu TFRecords używa metody tf.data.TFRecordDataset
, która implementuje metodę .shuffle()
.
Właściwie nie jestem pewien, czy to prawda. Metoda shuffle(), którą opisujesz, daje tylko losowość lokalną (w całej pojemności kolejki), a nie w całym rekordzie. – ezfn
Nigdy nie powiedziałem, że używa całego zbioru danych. Ale to również nie oznacza, że tasowanie w kolejce nie jest wystarczające, aby zapewnić konieczną losowość. Widziałem, że jest on używany w kilku implementacjach, możesz rzucić okiem np. tensor2tensor repo, w którym stosowana jest ta metoda. – bartgras
- 1. Tasowanie talii kart
- 2. Tensorflow utworzyć plik tfrecords z csv
- 3. Efektywne tasowanie bitów wektora liczb binarnych
- 4. Moduły i pola rekordów
- 5. Jak używać wartości odczytywanych z TFRecords jako argumentów dla tf.reshape?
- 6. Czysty kod Java/Scala do zapisu pliku danych Tensorflow TFRecords
- 7. Szyny aktywne skojarzenie rekordów rekordów z "istniejącymi"
- 8. Spring Boot, @Autowire w niezarządzaną klasę przy użyciu @Configurable i tasowanie czasu ładowania
- 9. Konwersja rekordów na listy (i powrót)
- 10. Haskell introspekcja nazw i typów pól rekordów
- 11. Przenoszenie i ponowne zamawianie rekordów na stałe
- 12. Delphi dynamiczna iteracja i kopiowanie rekordów
- 13. Powielanie aktywnych rekordów szyn i zapisanie niepowodzenia
- 14. Wyklucza aktywny zestaw rekordów z innego zestawu rekordów?
- 15. Uzyskaj wyraźne wartości rekordów
- 16. Dokumentacja rekordów w clojure
- 17. Symfony - aktualizacja wielu rekordów
- 18. Zestaw rekordów w pascal
- 19. 3d numpy tablica rekordów
- 20. Liczba odrębnych rekordów - SQL
- 21. CNContactStore liczba rekordów kontaktów
- 22. pymongo: usuwanie rekordów elegancko
- 23. Wybierz tylko połowę rekordów
- 24. Wybieranie liczby kolejnych rekordów
- 25. Flask-SQLAlchemy inna liczba rekordów dla .count() i .all()
- 26. Jak wybrać dane dla zdefiniowanej strony i całkowitej liczby rekordów?
- 27. Zaktualizowana wersja aplikacji iOS Nowe tablice rekordów i osiągnięcia
- 28. Zapobiegaj nakładaniu się rekordów za pomocą grafviz i neato
- 29. Zestaw skrzyżowań i zestaw różnicy rekordów dwóch plików z hadoopem
- 30. Dynamiczne tworzenie nowych modeli rekordów aktywnych i tabel bazy danych
Istnieje 'shuffle_batch', który używa' RandomShuffleQueue'. Przetasowuje buforowaną część zestawu danych, to pytanie zawiera więcej szczegółów - http://stackoverflow.com/questions/33715728/using-queues-to-uniformly-sample-from-multiple-input-files –
To jest pomocne ale proponowane przez niego rozwiązanie wciąż ładuje cały zestaw danych: wydaje się, że problem polega na tym, aby upewnić się, że klasy są w równym stopniu reprezentowane w mini-serii. Jeśli załadowanie całego zbioru danych nie jest praktyczne, wydaje się, że najlepszym rozwiązaniem jest po prostu utrzymywanie kolejek nazw plików i ładowanie poszczególnych instancji (być może z wieloma wątkami wprowadzanymi do kolejki). W tym scenariuszu TFRecord nie wydaje się dostarczać wiele wartości. – bobw