Dataloader Pytorcha

Dataloader Pytorcha
Dataloader Pytorch to przydatna funkcja, która utrzymuje zorganizowanie danych i upraszcza potok uczenia maszynowego. Pozwala nam iterować dane, zarządzać partiami i tasować próbki, aby uniknąć nadmiernego dopasowania. W tym artykule przejdziemy do implementacji DataSaloader w Pytorch. Wcześniej przejdziemy przez podstawowe terminologie, których będziemy używać podczas wdrażania ładowarki danych. Następnie zaczniemy od mody mnist zestaw danych pakowany z Pytorch. Później użyjemy DataLoader z naszym niestandardowym zestawem danych.

Co to jest Pytorch?

Pytorch to głębokie ramy uczenia się na otwartym poziomie do budowy architektur sieciowych i innych technik wysokiego poziomu, takich jak RNN, CNN i LSTM. Jest używany przez badaczy, firmy i społeczności ML i AI.

Grupa badań sztucznej inteligencji na Facebooku jest głównie odpowiedzialna za jego rozwój.

Czym jest tensor (podejście oparte na matematyce)?

Wywierać siłę na powierzchnię i obserwuj, jak się odchyla w różnych kierunkach. Możesz spodziewać się, że porusza się w tym samym kierunku co siła, ale nie zawsze tak się dzieje; Powodem tego jest to, że materiał nie jest jednolity we wszystkich kierunkach; może mieć pewną strukturę, taką jak kryształ lub warstwy. Siła, która jest wektorem, jest twoim punktem wyjścia. (Kierunki X, Y i Z mają trzy elementy.) Otrzymujesz wektor ugięcia (ruch w x, y i z). Siła jest jednak w odwrotnym kierunku od ruchu! Udawajmy, że odpowiedź jest proporcjonalna do siły, co oznacza podwojenie siły dwukrotnie więcej niż ruch. Nazywa się to „reakcją liniową."

Jak możesz to wszystko umieścić w terminach matematycznych? Oczywiście z tensorem. Rozważ tensor za instrument matematyczny, który przyjmuje wektor (taki jak siła) i zwraca nowy wektor (ruch). TENSORY są wymagane tylko wtedy, gdy dwa wektory wskazują w przeciwnych kierunkach.

Iteracje, partie, epoc. Czym są pod względem sieci neuronowych?

Liczba iteracji (oznaczona przez N tutaj) jest liczba razy, gdy partia instancji szkolenia szacuje gradient i aktualizuje parametry sieci neuronowej.

Rozmiar partii B odnosi się do liczby instancji szkoleniowych zatrudnionych w jednej iteracji. Jest to zwykle stosowane, gdy liczba instancji treningowych jest dość duża i zwykle skuteczne jest dzielenie całych danych na mini partię. Każda partia ma rozmiar: 1< B < N.

Aby użyć pełnych danych szkoleniowych raz, wymaga N (N/B) Iteracje. Taki jest epoka. Więc (N/B)*mi, Gdzie mi jest liczbą epok, to całkowita liczba razy zmieniono parametry.

Istnieją trzy rodzaje pochodzenia gradientu. Istnieje między nimi kompromis, ponieważ można zapewnić dobrą dokładność, ale jest powolne. Z drugiej strony jeden jest szybszy, ale nie gwarantuje dobrej dokładności:

N = B, jedna epoka równa się jednej iteracji w trybie wsadowym.

Tryb mini: 1 < B < N, with N/B iterations per epoch.

B = 1, jedna epoka przyjmuje N iteracji w stochastycznym modelu zejścia gradientu.

Wdrażanie danych DataLoader na zestawie danych mody mnist

Ładowanie zestawu danych MNIST z Pytorch

Fashion-MNIST to zestaw danych obrazu, który obejmuje 60 000 szkoleń i 10 000 instancji testowych. Każdy przykład zawiera obraz w skali szarości 28 x 28 z etykietą z jednej z dziesięciu kategorii. Poniżej znajdują się kilka parametrów, które zaspokajasz podczas ładowania zestawu danych.

źródło: To jest katalog, w którym zapisano zestaw danych.

pociąg: wskazuje, że należy załadować wyszkolone lub przetestowane dane.

pobierać: Jeśli dane nie są dostępne w root, są pobierane przez Internet.

Transform i Target_Transform: Te parametry określają transformacje funkcji i etykiety.

Importuj pochodnię
Fromtorch.Utils.Zestaw danych DataImport
Zestawy danych fromtorchVisionImport
Fromtorchvision.TransformSimportTotensor
importmatplotlib.Pyplotasplt
pociąg = zestawy danych.Mody
root = "Data",
pociąg = prawda,
Pobierz = prawda,
Transform = Totensor ()
)
test = zestawy danych.Mody
root = "Data",
pociąg = fałsz,
Pobierz = prawda,
Transform = Totensor ()
)

Zwyczaj Zestaw danych twoich plików

Importos
importować pandy jako PD
z pochodni.IO ImporTread_image
# Utwórz klasę dla niestandardowego zestawu danych
classCustomDataset (zestaw danych):
# Zainicjuj zestaw danych
def__init __ (self, adnotacje, img_dir, trans = brak, target_trans = brak):
samego siebie.Etykiety = PD.read_csv (adnotacje)
samego siebie.IMG_DIR = IMG_DIR
samego siebie.trans = trans
samego siebie.Target_trans = Target_trans
# funkcja, aby zwrócić długość danych
def__len __ (ja):
Returnlen (ja.etykiety)
# funkcja, aby uzyskać próbkę przy danym indeksie
def__getItem __ (self, indeks):
ścieżka = OS.ścieżka.Dołącz (ja.img_dir, self.etykiety.ILOC [indeks, 0])
img = read_image (ścieżka)
etykieta = self.etykiety.ILOC [indeks, 1]
ifelf.trans:
img = self.trans (IMG)
ifelf.Target_trans:
etykieta = self.Target_trans (etykieta)
ReturnImg, etykieta

W powyższym kodzie widzimy trzy ważne metody:

__w tym__: Ta funkcja jest wywoływana po tworzeniu obiektu zestawu danych. Zarówno transformacje, jak i katalog zawierający obrazy i plik adnotacji, są konfigurowane.

__len__: Ta funkcja zwraca długość zestawu danych lub liczbę próbek w zestawie danych.

__Zdobądź przedmiot__: Ta metoda daje nam próbkę obecną na indeksie.

Szkolenie z dataloader

Przechowuj dane do ładowarek danych. Ładowarki danych są iteralne, które pozwalają przepuszczać próbki pojedynczo w momencie treningu, a nawet tasowanie danych po przetworzeniu wszystkich partii.

od pochodni.Utils.Importuj dane DataLoader
Train_Loader = DataLoader (Train, Batch_Size = 32, shuffle = true)
test_loader = DataLoader (test, Batch_Size = 32, shuffle = true)

Iteruj DataSaloader

# Wyświetl obraz i etykieta.
Train_features, Train_Labels = Next (ITER (Train_Loader))
Drukuj (F ”Kształt bieżącej partii to Train_features.rozmiar()")
Drukuj (F „Etykiety kształtu bieżącego kształtu partii to Train_Labels.rozmiar()")
IMG = Train_features [0].ściskać()
etykieta = Train_Labels [0]
plt.IMSHOW (IMG, cmap = „Gray”)
plt.pokazywać()
print (f "etykieta: etykieta")

Wyjście

Cechy kształt obecnej partii jest pochodni.Rozmiar ([32, 1, 28, 28])

Etykiety kształt aktualnego kształtu partii jest pochodni.Rozmiar ([32])

Etykieta: 5

Każda iteracja w powyższym kodzie zwraca partię funkcji treningowych i etykiet treningowych dla każdej iteracji. Aby uniknąć nadmiernego dopasowania, dane są przetasowane po przetworzeniu wszystkich partii.

Wdrażanie ładowacza danych w niestandardowym zestawie danych

# Importowanie bibliotek, których będziemy korzystać
Importuj pochodnię
Fromtorch.Utils.Zestaw danych DataImport
Fromtorch.Utils.DataImportDataloader
# Definiowanie klasy zestawu danych
ClassDatasets (zestaw danych):
# inicjowanie zestawu danych tutaj
def__init __ (ja):
liczby = lista (zakres (0, 20, 1))
samego siebie.dane = liczby
# Uzyskaj długość zestawu danych tutaj
def__len __ (ja):
Returnlen (ja.dane)
# Zdobądź element w indeksie
def__getItem __ (self, indeks):
POWRO.Dane [indeks]
# Utwórz obiekt klasy data_set
DataSet = DataSets ()
# Wdrożenie ładowacza danych w zestawie danych i określenie parametrów
DataLoader = DatALoader (zestaw danych, Batch_Size = 5, Shuffle = True)
Fori, partia w wyliczaniu (DataSaloader):
Drukuj (i, partia)

Wyjście

0 Tensor ([0, 4, 9, 15, 14])
1 tensor ([11, 16, 12, 3, 10])
2 tensor ([6, 8, 2, 17, 1])
3 tensor ([7, 18, 5, 13, 19])

Wniosek

Przeszliśmy przez wdrożenie DataSoadera Pytorcha, aby zarządzać szkoleniem naszych danych. Teraz zdajemy sobie sprawę, jak łatwo możemy zarządzać partiami, tasować, iterować nasze zestawy danych za pomocą DataSaloader. Pomaga to w lepszej analizie naszych modeli i ostatecznie je poprawić.