Samouczek Pytorch

Samouczek Pytorch
Pytorch to biblioteka uczenia maszynowego typu open source, która jest używana do Pythona. Zespół badań sztucznej inteligencji na Facebooku początkowo go stworzył, służąc jako podstawa oprogramowania Pyro Pyro w programie probabilistycznym. Jest to matematyczny zestaw narzędzi, który umożliwia efektywne i automatyczne obliczanie modeli opartych na kontrast.

Ponieważ jest prosty i dostosowujący się, Pytorch API jest popularny wśród naukowców i badaczy, tworząc nowe modele i aplikacje głębokiego uczenia się. Ze względu na powszechne zastosowanie istnieje już wiele rozszerzeń dla niszowych aplikacji, takich jak dane tekstowe, komputerowe i dane audio, oraz potencjalnie gotowe do użycia modele wstępnie przeszkolone.

Cechy

Kluczowe cechy Pytorcha to:

Łatwy w użyciu

Ponieważ Pytorch ma intuicyjny interfejs API i polega na Pythonie, jest uważany za stosunkowo łatwy w użyciu. Wykonanie kodu jest proste przez tę framework.

Zastosowanie Pythona

Ten moduł płynnie wchodzi w interakcje z Python Data Science STAC i jest uważany. W rezultacie może wykorzystywać wszystkie funkcje i usługi, które zapewnia środowisko Python.

Wykresy obliczeniowe

Pytorch oferuje skuteczne środowisko dla dynamicznych wykresów obliczeniowych. Umożliwia to modyfikację czasu wykonywania przez użytkownika.

Narzędzia i biblioteki

Żywa społeczność naukowców i twórców ustanowiła kompleksową sieć narzędzi i bibliotek do rozpowszechniania Pytorcha i wspierania rozwoju w dziedzinach takich jak wizja komputerowa i uczenie się wzmocnienia.

Korzyści z Pytorcha

  • Jest łatwy do zrozumienia i prosty w kodowaniu, ponieważ opiera się na Pythonie
  • Umożliwia proste debugowanie za pomocą dobrze lubianych narzędzi Python
  • Pytorch jest prosty w skali i ma doskonałe wsparcie na najpopularniejszych platformach chmurowych
  • Koncentruje swoją małą społeczność na open source
  • Ma zdolność do eksportowania modeli uczenia się w formacie wspólnym otwartej wymiany sieci neuronowej (ONNX)

Różnica między pochodnią a Pytorch

Torch (Torch7) to darmowa biblioteka uczenia maszynowego i naukowe framework obliczeniowy oparty na języku programowania i zwykle dostępny za pomocą interfejsu LUA. Nie jest już aktywnie rozwijany.

Pytorch to biblioteka oparta na pochodni, ponieważ jest prosta i elastyczna. W Pytorch „Py” wskazuje Python, w którym „pochodnia” odzwierciedla swoją wcześniejszą bibliotekę pochodni.

Jak zainstalować Pytorch

Pamiętaj, że Python jest zainstalowany, zwłaszcza wersja 3.7 lub więcej, przed skonfigurowaniem Pytorcha. Python można zainstalować za pomocą Anaconda. Po założeniu naszego środowiska Python przejdziemy do naszego następnego etapu instalacji Pytorch.

Po pierwsze, musimy stworzyć wirtualne środowisko dla Condę, w którym chcemy zainstalować wszystkie nasze pakiety i ustalić środowisko.

$ ceda create -n pytorch python = 3.7

CDADA jest menedżerem środowiska, który pomaga zainstalować pakiet programu uczenia maszynowego. Jeśli musisz pracować z inną wersją Python, nie musisz się do niego przełączać. CDEDA automatycznie zarządza tym. Musisz tylko użyć niektórych poleceń, aby tworzyć środowisko zgodnie z wyborem.

Gdzie tworzenie jest słowem kluczowym, aby poinformować kompilatora, aby stworzył nowe środowisko dla Pytorcha, które użyje „Python 3.Wersja 7 ”. Kiedy nasze pakiety zostaną pomyślnie pobrane, poprosi o pozwolenie na ich zainstalowanie, czy nie.

W miarę pomyślnego tworzenia środowiska wyświetli dane wyjściowe, jak pokazano w poniższym fragmencie:

Zacznijmy od instalacji Pytorch:

Otwórz następujący link i przejdź do strony internetowej Pytorch. Przejdź do karty Uruchom rozpoczęcie i kliknij Uruchom lokalnie.

https: // pytorch.org/get-started/lokalnie/

Będzie widoczna strefa taka jak ta na rysunku. Pierwszym selektorem będzie kompilacja Pytorch i wybierz stabilność (1.12.1) z danych opcji. Teraz wybrane będzie drugie pole selektora i możesz wybrać system operacyjny zgodnie z Twoimi wymaganiami. Wybierzemy system systemu Windows z podanych opcji, ponieważ używamy systemu Windows do wykonywania naszych zadań. Trzecia karta będzie pakietem. Wybierzemy CDADA z danych opcji. Jeśli użyjemy innego pakietu, wybierzemy ten pakiet.

W drugiej ostatniej opcji wybierz nazwę języka, którego używasz, aw naszym przypadku będzie to Python, abyśmy wybierzeli go z danych opcji. W końcu wybierzemy procesor spośród danych opcji, ponieważ używamy procesora jako naszej platformy komputerowej. Jeśli używamy innej platformy, takiej jak CUDA, wybierz CUDA.

Po wybraniu wszystkich opcji z podanych powyżej selektorów, polecenie zostanie wyświetlone w polu poniżej. Skopiuj to polecenie i uruchom to polecenie w wierszu polecenia CDADA.

W poprzednim poleceniu Conda zostanie poinstruowana o zainstalowaniu Pytorch i innych bibliotek, Torchvision i Torchaudio, gdzie Torchvision jest biblioteką Python. Został zaprojektowany w celu uproszczenia testowania i studiowania w dziedzinie wizji komputerowej. Ma modelowe architektury, wspólne transformacje obrazu i inne popularne zestawy danych do wizji komputerowej.

Torchaudio jest również pakietem Pytorch i został zbudowany do przetwarzania audio i sygnału komputerów. Ma również popularne zestawy danych, we/wy i wspólne transformacje audio.

Po pobraniu wszystkich naszych pakietów poprosi o zgodę, czy kontynuować to, czy nie.

Teraz, przechodząc do naszego następnego kroku, aktywuj nasze pakiety Pytorch. W ten sposób uruchomimy następujące polecenie w wierszu polecenia Anaconda:

$ CDADA Aktywuj Pytorch

Teraz aktywacja naszych pakietów Pytorch za pomocą polecenia wspomnianego wcześniej w tym aktywacji jest słowem kluczowym używanym do instruowania CONDA do aktywacji biblioteki Pytorch, którą już zainstalowaliśmy.

Możemy zweryfikować, uruchamiając Pythona, że ​​jeśli działa, wyświetli następujące dane wyjściowe:

Następnie musimy zaimportować pochodnię; Jeśli wyświetla moduł, który nie został znaleziony, oznacza to, że instalacja była nieprawidłowa. W takim przypadku instalacja była poprawna, więc nie wyświetliła żadnego błędu.

Teraz możemy utworzyć tensor pochodni, aby sprawdzić, czy działa to poprawnie; powiedzmy:

$ x = pochodnia.Rand (3)
$ print (x)

W poprzednim poleceniu utworzyliśmy zmienną „x” i przypisaliśmy ją do pochodni wartości.Rand, gdzie Rand wskazuje wartość losową. Następnie wyświetliliśmy dla niego wyjście pochodni za pomocą funkcji drukowania i przekazując ją naszą zmienną „x”. Poniższy zrzut ekranu pokazuje, w jaki sposób wyświetlane są wartości tensor:

Teraz, sprawdzając wersję pochodni, importujemy pochodnię i używając funkcji drukowania, przekazamy wartość „Torch__version__”, aby ją sprawdzić.

$ Import Torch
$ druk (pochodnia.__wersja__)

Oto dane wyjściowe następujące polecenie, jak pokazano na poprzednim rysunku. A teraz nasze środowisko Pytorch jest pomyślnie zainstalowane do naszego użycia.

Pytorch głębokie uczenie się model cyklu życia

Projekty dotyczące uczenia maszynowego nie są proste; Obejmują ciągły cykl ulepszania danych, modelu i oceny. Ten cykl jest niezbędny do tworzenia modelu uczenia maszynowego, ponieważ podkreśla użycie symulacji i wyników w celu poprawy zestawu danych.

Od ponad dziesięciu lat głębokie uczenie się było głównym tematem i przyczyniło się do zwiększonego koncentracji na rynku na ML. Opracowanie wielu narzędzi pomocy w produkcji modeli ML spowodowało, że przemysł ML doświadczył.

5 głównych kroków dla modelu głębokiego uczenia się cyklu życia to:

  1. Przygotowanie danych
  2. Definiowanie modalne
  3. Szkolenie modalne
  4. Ocena modalna
  5. Tworzenie prognoz

Przykład 1

W tym przykładzie użyjemy biblioteki Torchvision z wstępnie załadowanym zestawem danych „FashionMnist” przy użyciu biblioteki Torchvision of Pytorch, która ma rzeczywiste obiekty w świecie rzeczywistym.

Jeśli chodzi o pracę z danymi, Pytorch używa swoich dwóch głównych elementów, które są pochodniami.Utils.dane.DataLoader i pochodnia.Utils.dane.Zestaw danych, umożliwiając nam korzystanie z danych lub wstępnie załadowanych zestawów danych. Ładowarka danych obejmuje iterację wokół zestawu danych, aby ułatwić pozyskiwanie próbek, których zestaw danych używa do przechowywania próbek i powiązanych etykiet.

Totensor służy do ulepszenia i transformacji obrazu, podczas gdy pakiet NN określa zbiór praktycznych funkcji strat, które są zwykle stosowane. Zestaw danych FashionMnist działa na obrazy z elementami od 0-255. Możesz także pisać dostosowane transformacje zgodnie z Twoimi potrzebami. Sprawdźmy kod tego scenariusza na poniższym obrazku:

W górnym kodzie przypisaliśmy zestaw danych o modzie. Ten zestaw danych przypisany do Training_Data składa się z wielu rzeczywistych danych wizji, takich jak Cifar i Coco. W tym przypadku zastosujemy zestaw danych mody. Wszystkie zestawy danych Torchvision wymagają dwóch parametrów. Jeden jest przekształcony, a drugi to tarme_transform. Te dwa parametry modyfikują etykiety i próbki.

Wyniki pokazane na figurze towarzyszącej pojawiają się po uruchomieniu kodu. Zacznie pobierać zestaw danych z biblioteki.

Teraz zestaw danych jest pobierany po wykonaniu naszego kodu. Przekażemy zestaw danych jako parametr do DataSaloader. Pomoże nam to w pobieraniu próbek, przetasowania, ładowaniu danych wieloprocesowej i automatycznej partii. W naszym przypadku przypisujemy 64 do naszej partii. W rezultacie definiujemy 64 rozmiary partii. Każdy element DataLoader iterable będzie mógł zwrócić wyjście partii 64 etykiet i funkcji.

Ustawiliśmy pociąg na to, ponieważ ustawia moduł. Pobieranie jest również ustawione w trybie True, ponieważ musimy pobrać zestaw danych, aby wyszkolić nasz moduł za pomocą tego zestawu danych. Przekazaliśmy dane do naszego parametru głównego, ponieważ przekazamy informacje do naszego modułu w formie danych, które pobramy z pakietu Totensor.

Po wykonaniu naszego kodu możemy zobaczyć w naszym wyjściu, że wydrukował on kształty x i y zgodnie z naszymi wcześniejszymi argumentami. Pobiera obrazy.

Teraz, zmierzając w kierunku tworzenia modalnego, stworzymy klasę o nazwie Neural Network, która odziedziczy NN. Moduł jest parametrem. Utworzymy funkcję o nazwie init; W tej funkcji zdefiniujemy warstwy sieci. Następnie utworzymy funkcję o nazwie, ponieważ nazwa wyjaśnia jej cel. Wskażemy, w jaki sposób dane będą przesyłane za pośrednictwem sieci w funkcji przodu.

Linear to klasa biblioteki NN, która stosuje transformację liniową do danych, które do niej przekazujemy. Mamy 28*28 jako liczba wymiarów do klasy liniowej. Relu to funkcja na pakietach NN, która obsługuje elementy negatywne, zastępując je 0. Aby przyspieszyć cały proces sieci neuronowej, używamy zasobów naszej karty graficznej, jeśli są one dostępne do wykorzystania. Sprawdźmy kod tego scenariusza na poniższym obrazie:

Funkcja init jest metodą inicjalizacji w Pytorch. Konieczne jest pozwolenie Pytorchowi zdobycie katalogów zawierających biblioteki. W tym przekazaliśmy to samokontrola. Podczas gdy w funkcji do przodu przekazujemy tensory wejściowe jako parametry, a funkcja przekazująca zwraca tensory wyjściowe, obliczając twoje tensory wejściowe. W tym przekazujemy dwa parametry, „ja” i „x”, do funkcji do przodu. Funkcja do przodu określa również, jak moduł będzie działał od danych wejściowych do wyjścia.

Następnie wyjście poprzedniego kodu pojawia się na poniższym zrzucie ekranu:

Po procesie wykonaliśmy w poprzednich krokach, wyszkolimy nasz model. Musimy zastosować optymalizator i funkcję straty, aby to osiągnąć. Procedura funkcji utraty określa rozbieżność między bieżącym wyjściem algorytmu a przewidywanym wyjściem. Optymalizator pomaga systemowi wybrać najlepszy wybór z zestawu możliwych opcji, które są łatwe i nie wykorzystują ograniczeń. Sprawdźmy kod tego scenariusza w przymocowanym obrazie pokazanym poniżej:

Epoch to parametr, który określa liczbę razy algorytm uczenia się przez zestaw danych, który dostarczyliśmy do szkolenia. W naszym przypadku ustawiliśmy go na 5, co oznacza, że ​​przechodzi przez nasz zestaw danych 5 razy podczas treningu.

Po zainicjowaniu epok użyjemy pętli, która uruchomi liczbę „T”, którą zadeklarowaliśmy w epokach. W tej pętli wykonuje wyszkoloną funkcję 5 razy i wykonuje ją. Po zakończeniu wykonywania „dla pętli” wydrukuje tekst „gotowy”.

Poniższy fragment wyświetla wyjście funkcji przeszkolonej epoki:

Przykład 2

W tym przypadku wystarczy rozwiązanie problemu dopasowania y = sin (x) z wielomianem trzeciego rzędu.

Metoda 1

W tej technice zostanie zastosowany optymalny pakiet optymalny przez Pytorch. "Latarka.Optim ”to pakiet Pytorch odpowiedzialny za wdrażanie różnych technik optymalizacji. Większość często stosowanych technik jest już zaimplementowana, a interfejs jest wystarczająco otwarty, że możliwa jest również przyszła łatwa integracja bardziej złożonych. Poprzez ręczną zmianę tensorów zawierających parametry do nauki z pochodnią.Bez absolwentów, wagi naszych modeli () są aktualizowane.

Użyjemy również pakietu NN do zadeklarowania naszego modalnego, ale użyjemy RMSPOP do optymalizacji modelu, ponieważ zapewnia on pakiet pochodni, który jest dostarczany przez Optime.

Przejdźmy do naszego kodu, aby utworzyć tensor odpowiedzialny za przechowywanie danych do wejścia i wyjścia. W naszym przypadku stworzyliśmy dwie zmienne, „A” i „B”. Następnie zdefiniujemy tensory wejściowe o nazwie „var” i „myvar”, które są tensorami wejściowymi x^, x^2 i x^3.

Następnie zadeklarujemy funkcje modalne i straty za pomocą pakietu NN. Utwórz optymalizator przy użyciu optymalnego pakietu, aby zmienić wagi modelu w naszym imieniu. RMSPROP zostanie użyty w tym przypadku; Optymalny pakiet obejmuje wiele innych technik optymalizacji. Pierwszy wejściowy konstruktor RMSPROP instruuje optymalizator, na którym należy zmodyfikować tensory. Utwórz optymalizator przy użyciu optymalnego pakietu, aby zmienić wagi modelu w naszym imieniu. RMSPROP zostanie użyty w tym przypadku; Optymalny pakiet obejmuje wiele innych technik optymalizacji. Kod do poprzedniego wyjaśnienia można znaleźć na następującym ekranie Spyder:

Następnie w poniższym kroku obliczymy przewidywany y, przekazując go Myvar:

$ y_pred = modal (myvar)

W nim Y_Predicat jest zmienną, do której przypisujemy funkcję modalną, do której przekazuje wartość „myvar”. Strata zostanie następnie obliczona i wyświetlana. Jest to spowodowane faktem, że gradienty są dynamicznie gromadzone w buforach, gdy tylko.backward () jest wywoływany.

strata.backward () określi gradient straty z uwzględnieniem modelu. Gdy wywoływana jest funkcja optymalizatora, jego parametry są aktualizowane. Funkcje wejściowe warstw liniowych są mnożone przez macierz wagi w celu wygenerowania funkcji wyjściowych. Cechy wejściowe są przekazywane do warstwy liniowej jako jednowymiarowy tensor, który został rozebrany, i są mnożone przez matrycę wagową. Na końcu kodu wyświetli dane wyjściowe w wyniku postaci równania.

Metoda 2

W poniższej metodzie będziemy używać pakietów tensor i autograd. Najpierw zaimportuj nasze biblioteki pochodni i matematyki dla tego programu, a następnie zdefiniuj nasze zmienne „DTYPE”. Tutaj przypisaliśmy pochodnię wartości.Float zgodnie z poprzednim przykłem i zdefiniował zmienną „urządzenie”. Ponownie przypisujemy pochodnię wartości.urządzenie („CPU”), które służy do zdefiniowania platformy do użycia.

Aby przechowywać wejścia i wyjścia, utwórz tensory. Zakładając, że wymaga grad = false, zacofanie wsteczne nie musi domyślnie obliczać gradientów na tych tensorach. Wytwarzaj ciężary za pomocą losowych tensorów. Wymagamy czterech wag dla wielomianu trzeciego rzędu: y = a + b x + c x^2 + d x^3. Chcemy obliczyć gradienty dotyczące tych tensorów podczas przełęczy wstecznej, co jest wskazane przez wartość _grad = true.

Oblicz i wyświetlanie strat za pomocą funkcji tensor. Strata staje się tensor z formą (1,) straty. Wartość skalarna straty jest zwracana przez item (). Kod do poprzedniego wyjaśnienia można znaleźć na następującym ekranie Spyder:

W takim przypadku wstecz naszej sieci neuronowej należy zarządzać ręcznie. Nie jest to fizycznie trudne dla prostej dwuwarstwowej sieci. Może jednak szybko skomplikować dla dużych złożonych sieci. Na szczęście możemy wykorzystać automatyczne różnicowanie, aby zmechanizować proces zacofania w sieciach neuronowych. Biblioteka Autograd w Pytorch daje tę funkcjonalność bardzo precyzyjnie; Podczas korzystania z Autograd przepustka do sieci scharakteryzuje wykres obliczeniowy. Wykres będzie miał węzły i krawędzie; TENSORY są reprezentowane za pomocą węzłów, a krawędzie reprezentują metody, które zwrócą tensory wyjściowe, przyjmując tensory wejściowe jako argumenty.

Czytanie tego wykresu pomaga łatwo obliczyć gradienty. To wydaje się trudnym zadaniem, ale w rzeczywistości ta praktyka jest bardzo prosta i prosta. Jeśli „x” jest tensor, a atrybut „wymaga stopnia”, jest ustawiony na true. Dlatego x jest tensor, który adresuje węzeł na wykresie obliczeniowym. X.Grad to kolejny tensor trzymający nachylenie „x” dla pewnej wartości skalarnej. Tutaj demonstrujemy dopasowanie fali sinusoidalnej z wielomianem trzeciego rzędu przy użyciu tensorów Pytorch i Autograd. Teraz nie ma potrzeby ręcznego wykonania wstecznej przerwy za pośrednictwem sieci.

Metoda 3

W tym przykładzie będziemy używać modułu Numpy. Numpy to biblioteka Python dla języka programowania, który obsługuje znaczne, wielowymiarowe tablice i macierze. Ponadto znaczna liczba operacji matematycznych na wysokim poziomie do działania na tych tablicach. Numpy to ogólna platforma do obliczania operacji naukowych; Nie wymaga głębokiego uczenia się ani obliczania wykresów.

Korzystając z operacji Numpy, możemy łatwo dopasować wielomian trzeciego rzędu w funkcji „grzechu”. W tym celu najpierw zaimportujemy biblioteki Numpy i Math. Matematyka to pakiet używany do importowania operacji matematycznych. Sprawdźmy kod tego scenariusza na poniższym obrazku:

Najpierw zainicjowaliśmy dwie zmienne o nazwie „var1” i „var2” i przypisaliśmy ich funkcje. Tutaj, NP.Funkcja Linspace to metoda Pythona, która pomaga nam tworzyć sekwencje numeryczne. Pomaga nam w generowaniu wektorów liniowych. Jest taki sam jak znak okrężnicy, ale jedyną różnicą między znakiem okrężnicy i jest to, że zapewnia nam bezpośrednią kontrolę nad liczbą punktów. Do tej funkcji przekazaliśmy trzy parametry, które są „-mat.pi ”,„ Matematyka.pi ”i„ 200 ”, w których 200 to zakres, w którym zostanie wykonane obliczenia. A druga funkcja, którą przekazaliśmy do Var2, jest „NP.sin (var1) ”, który służy do obliczania sinusu wartości, które będą przechowywane w„ var1 ”.

Następnie zainicjowaliśmy cztery zmienne o nazwie „A”, „B”, „C” i „D” do tych zmiennych, które przeszliśmy losowe wartości. Następnie zainicjowaliśmy pętlę dla, do której przekazaliśmy zmienną „t”, wskazując czas i zakres do 200.

Następnie zdefiniuj inną zmienną, „var2_pred”, do której przypiszmy operację matematyczną do obliczania agregatu, a następnie przekazamy ją do zmiennej o nazwie „strata”. Strata będzie odpowiedzialna za obliczenie straty var „var2_pred”.

Przechodząc do następnego kroku, w którym użyliśmy instrukcji IF, która będzie odpowiedzialna za obliczenie obliczenia „t%10 == 9”, przyjmie tryb „t” z wartością 10 i zwiększy ją o 9. Wydrukuje utratę tych wartości uzyskanych z poprzedniej instrukcji IF.

Po wszystkich tych obliczeniach, w których kończy się pętla, podsumuje całe wartości, a ostatnia operacja drukowania zostanie obliczona na końcu pętli i będzie wyświetlana w rezultacie, jak pokazano na poniższym fragmencie:

Metoda 4

W tym fragmencie kodu będziemy używać pakietu tensor. Numpy tablica i tensor Pytorch są teoretycznie równoważne, ponieważ tensor jest wielowymiarową tablicą, a Pytorch oferuje różne metody pracy z nimi. TENSORY to ogólne narzędzie do przetwarzania naukowego, które może monitorować gradienty i wykresy obliczeniowe w tle. TENSORY PYTORCH mogą używać GPU do przyspieszenia swoich operacji numerycznych, w przeciwieństwie do Numpy. Tensor Pytorch można wykonać na GPU w kilku łatwych krokach.

W tym fragmencie kodu zaimportowaliśmy dwie biblioteki, pochodnię i matematykę. Ponieważ będziemy używać pochodni w tym kodzie i funkcjonalności matematycznej, zdefiniowaliśmy zmienną o nazwie „Dtype”. Przypisowaliśmy pochodnię danych.pływaj, ponieważ wykonujemy operacje matematyczne, które zwracają wartości w punktach. Aby przechowywać wartości dziesiętne, używamy DataType Float.

Następnie zadeklarowaliśmy inną zmienną o nazwie „urządzenie” z przypisaniem pochodni wartości.Urządzenie („CPU”), ponieważ wybraliśmy procesor jako naszą platformę w instalacji Pytorch. Idąc naprzód, zainicjowaliśmy dwie zmienne o nazwie var1 „i„ var2 ”i przypisaliśmy im tę samą funkcję, którą przypisaliśmy w poprzednim przykładzie. Następnie tworzenie czterech zmiennych, które są „a”, „b”, „c” i „d” do tworzenia losowych tensorów. Każdy ma swój unikalny kształt; Przeszliśmy również urządzenie danych i DTYPE, które zostaną zainicjowane na początku naszego kodu. Tak więc wykorzysta zasoby naszego procesora i przyjmie wartości w postaci dziesiętnych. Wskazano, że zamierzamy obliczyć gradienty dotyczące takich tensorów podczas przełęczywskiej przełęczy. Sprawdźmy kod tego scenariusza na poniższym obrazie:

Następnie zadeklarowaliśmy edukację_rate = 1e-6. Wskaźnik uczenia się jest również hiperparametrem wykorzystywanym do szkolenia sieci neuronowych. Ma bardzo małą wartość, która musi być większa niż 0.0 i mniej niż 1.0, co oznacza, że ​​musi to być wartość dodatnia. Tempo uczenia się wzrasta wraz ze wzrostem wskaźnika uczenia się.

Następnie otworzymy pętlę, która zostanie wykonana 200 razy i będzie wykonywać operacje matematyczne na naszych zmiennych. Gdziekolwiek t%100 jest równa 99, pętla wydrukuje liczbę razy wykonywana i zatrzymana. Następnie wynik zostanie opublikowany jako koniec iteracja, jak pokazano na poniższym zrzucie ekranu:

Metoda 5

W tej metodzie będziemy tworzyć naszą funkcję Autograd za pomocą podklas Pytorch. Każdy podstawowy autograd to dwie metody działające na tensorach. Funkcja do przodu pobiera tensory wejściowe i oblicza od nich tensory wyjściowe. W Pytorch możemy niewątpliwie scharakteryzować naszego operatora Autograd, opisując podklasę.Autograd.funkcjonować i uruchomić podejścia do przodu i do tyłu.

Teraz tensory wyjściowe są nabywane jako parametry do funkcji wstecznych z niektórymi wartościami skalarnymi. Pytorch ułatwia nam zdefiniowanie naszego operatora Autograd, umożliwiając nam utworzenie podklasy, która analizuje gradient tensorów wejściowych z aluzją do tych samych wartości skalarnych. Teraz możemy użyć naszego operatora Autograd, inicjując konstruktor i nazywając go metodą. Następnie przekazamy tensor z danymi wejściowymi jako parametr do tego konstruktora.

W poniższym przykładzie określamy nasz modal jako:

$ y = a+b p_3 (c+dx)
y = A+BP3 (C+DX)
zamiast
y = a+bx+cx^2+dx^3
y = a+bx+cx2+dx3

Układamy naszą niestandardową metodę Autograd, przetwarzając do przodu i do tyłu P3 i używając jej do wykonania naszego modelu. Kod następnego wyjaśnienia można znaleźć na ekranie Spyder.

Podklasując pochodnię, możemy zaimplementować nasze unikalne funkcje Autograd.Autograd. Zatem funkcjonowanie i wdrażanie przepustek do przodu i do tyłu, które używają tensorów. Otrzymujemy tensor trzymający wejście podczas przełęczy do przodu i dostarczamy tensor zawierający zwrot wyjściowy. Obiekt kontekstowy o nazwie CTX może być używany do przechowywania danych do wykorzystania w obliczeniach wstecznych.

Tensory można utworzyć do przechowywania wejściowych i wyjściowych. Zakładając, że wymaga grad = false, zacofanie wsteczne nie musi domyślnie obliczać gradientów na tych tensorach.

Wytwarzaj ciężary za pomocą losowych tensorów. Aby zagwarantować konwergencję, wagi w tym przykładzie należy wprowadzić rozsądnie zbliżone do dokładnego wyniku: Y = A + B * P3 (C + D * X). Wskazano, że zamierzamy wygenerować gradient dotyczący tych odwzorowań podczas przepustki wstecznej przez ustawienie, które wymaga grad = true.

Poniższy obraz pokazuje wyjście, które wygenerował poprzedni kod:

Metoda 6

Tutaj użyjemy modułu NN do rozwiązania tego problemu. Po zaimportowaniu naszych pożądanych bibliotek pochodni i matematyki zadeklarujemy tensory do przypisywania danych wejściowych i wyjściowych. Ten przykład można uznać za liniową sieć neuronową warstwy, ponieważ wynikowe wyjście jest funkcją liniową (x, x2, x3). Sprawdźmy kod tego scenariusza jest następującym obrazem umieszczonym:

Przygotujmy tensor (x, x2, x3). Ponieważ P ma kształt (3) i x.Unsqueeze (-1) ma strukturę (200, 1), semantyka strumieniowa zostanie wykorzystana do wytworzenia tensor kształtu w tej sytuacji (200, 3). Aby skonstruować nasz model jako serię warstw, użyj pakietu NN. NN to moduł, który sekwencyjnie stosuje inne moduły, aby uzyskać jego wyjście, znane jako moduł sekwencyjny. Moduł liniowy utrzymuje wewnętrzne tensory dla jego odchylenia i wagi i wykorzystuje funkcję liniową do obliczenia wyjścia z wejścia. Aby obliczyć przepustkę wsteczną, użyj Autograd.

A.Grad, ur.Grad będzie postępować zgodnie z tym wezwaniem. TENSORY OTRZYMANIA Gradient straty w odniesieniu do liter A, B, C i D są oznaczone jako C.Grad i d.odpowiednio. Wykorzystaliśmy średni błąd kwadratowy (MSE) jako naszą funkcję straty, która jest zdefiniowana w pakiecie NN wraz z innymi wyraźnymi funkcjami strat.

Przełęcz do przodu: Podając model X, oblicz przewidywane y. Operator __call__ jest rozszerzony przez obiekty modułu, co pozwala wywołać je jak funkcje. W ten sposób podajesz moduł tensor danych wejściowych i zwraca on tensor oczekiwanego wyjścia. Duplikat i utrata drukowania Funkcja straty zapewnia tensor, który zawiera stratę po otrzymaniu od nas tensorów zawierających prawdziwe i przewidywane wartości y y.

Oblicz gradient straty w stosunku do każdego parametru modelu uczenia się podczas przełęczy wstecznej. Ze względu na wewnętrzne przechowywanie charakterystyk każdego modułu w tensorach, które wymagają ustawienia stopnia na true, ta funkcja będzie obliczała gradienty dla wszystkich parametrów modelu, które można uczyć. Możesz uzyskać dostęp do początkowej warstwy modelu, wybierając pierwszy element z listy.

W końcu wynik jest wyświetlany przy użyciu funkcji drukowania, gdy cała iteracja jest pomyślnie wykonywana.

Metoda 7

Latarka.Moduł NN jest na ogół głównym elementem konstrukcyjnym Pytorcha. Najpierw zdefiniuj NN.Obiekt modułu, a następnie wywołaj jego funkcję do przodu, aby ją uruchomić. Ta metoda działania jest zorientowana na obiekt. Całkowicie podłączona sieć RELU zawiera jedną ukrytą warstwę przeszkoloną do prognozowania y z x poprzez zmniejszenie kwadratowej odległości euklidesowej.

W tym przypadku model jest zdefiniowany jako konkretny podklasa modułu. Musisz zdefiniować swój model w ten sposób w dowolnym momencie, aby był on bardziej złożony niż prosta lista wszystkich obecnie istniejących modułów. Kod do poprzedniego wyjaśnienia można znaleźć na następującym ekranie Spyder:

Następnie oblicz przepustkę wsteczną za pomocą Autograd. Metoda określa gradient straty dla wszystkich tensorów z wymaganym stopniem = prawda. A.Grad, ur.Grad będzie postępować zgodnie z tym wezwaniem. Tensory zawierające gradient straty w odniesieniu do liter A, B, C i D są oznaczone jako C.Grad i d.odpowiednio. Możemy również zdefiniować niestandardową funkcję w Pytorch.

Po utworzeniu klasy wielomianu3, zadeklarujemy tensory do przechowywania danych wejściowych i wyjściowych. Cztery argumenty są tworzone i przypisywane jako parametry członka w funkcji. W przypadku użycia z modułami podklasa tensorów znana jako parametr ma wysoce unikalną właściwość. Przy przypisaniu atrybutów modułu parametr jest automatycznie zawarty na liście parametrów modułu i pojawi się na liście parametrów modułu, e.G., W parametrach () iterator. Metoda parametrów () w każdym NN.Moduł pobiera zmienne szkolone modułu. Zmienne te muszą być wyraźnie zdefiniowane.

Funkcja do przodu wymaga tensor danych wejściowych i tensor danych wyjściowych. Możemy zastosować dowolne operatory do tensorów i modułów zdefiniowanych w konstruktorze. Zbuduj optymalizator i naszą funkcję straty. Parametry do wyszkolenia, które są członkami modelu i są określone za pomocą pochodni.nn.Parametr w konstruktorze SGD byłby uwzględniony w modelu wywołania.parametry (). Następnie w przełęczy do przodu oblicz przewidywane y (y_pred) i przekaż go zmienną „var”.Na koniec gradienty zerowe automatycznie wykona przepustkę wsteczną i wykonają ciężary.

Stochastic Gradient Descent (SGD) to optymalizator, który należy do rodziny zejścia gradientowego i jest znaną techniką optymalizacyjną stosowaną w głębokim uczeniu się i uczeniu maszynowym. Termin „stochastyczny” odnosi się do systemu połączonego lub powiązanego z losowym prawdopodobieństwem w optymalizatorze SGD.

Ostatecznie obliczymy stratę i wydrukujemy ją, przypisując jej funkcję kryterium odpowiedzialną za obliczenie straty. Minęliśmy przewidywane Y i modal, który przeszkoliśmy. Wówczas deklarowanie, czy stwierdzenie, które jest obliczaniem trybu przez 10 zmiennych wartości „t”. Następnie zwiększy go o 9, a wynikowa wartość t jest przekazywana do funkcji druku, na którą strata zostanie obliczona.

Na końcu kodu wynik zostanie pomyślnie wykonany, jak pokazano na poniższym rysunku:

Wniosek

Zastosowanie interfejsu API Pytorch do typowych działań tworzenia modelu głębokiego uczenia się jest centralnym celem samouczka. Informacje, które badałeś w tym artykule, powinny ułatwić umieszczenie wszelkich wyrafinowanych koncepcji Pytorcha, o których mogłeś pomyśleć i nauczyć się moduł. Omówiliśmy również różne sposoby wdrożenia pojedynczego przykładu za pomocą różnych modułów, Numpy, Tensor Torch, Torch i Autograd, ustanawiając nową funkcję Autograd, Optime Function, Moduły NN, a także niestandardowy moduł NN. Platformą używaną do wykonywania naszego kodu jest Spyder; Możesz użyć innych platform, takich jak Conda, Jupiter i Linux.