Latarka (uczenie maszynowe)

Latarka
Oryginalni autorzy Ronan Collobert, Samy Bengio , Johnny Mariéthoz
Pierwsze wydanie październik 2002 ; 20 lat temu ( 2002-10 )
Wersja stabilna
7.0 / 27 lutego 2017 ; 6 lat temu ( 2017-02-27 )
Magazyn
Napisane w Lua , LuaJIT , C , CUDA i C++
System operacyjny Linux , Android , Mac OS X , iOS
Typ Biblioteka do uczenia maszynowego i uczenia głębokiego
Licencja Licencja BSD
Strona internetowa pochodnia _

Torch to biblioteka uczenia maszynowego typu open source , naukowa platforma obliczeniowa i język skryptowy oparty na języku programowania Lua . Zapewnia szeroką gamę algorytmów do głębokiego uczenia się i wykorzystuje język skryptowy LuaJIT oraz podstawową implementację C. Został stworzony w IDIAP w EPFL . Od 2018 roku Torch nie jest już aktywnie rozwijany. Jednak PyTorch , który jest oparty na bibliotece Torch, jest aktywnie rozwijany od grudnia 2022 r.

latarka

Podstawowym pakietem Torch jest torch . Zapewnia elastyczną tablicę N-wymiarową lub Tensor, która obsługuje podstawowe procedury indeksowania, krojenia, transponowania, rzutowania typów, zmiany rozmiaru, udostępniania pamięci i klonowania. Ten obiekt jest używany przez większość innych pakietów i dlatego stanowi główny obiekt biblioteki. Tensor obsługuje również operacje matematyczne, takie jak maks , min , suma , rozkłady statystyczne, takie jak jednolite , normalne i wielomianowe , oraz operacje BLAS , takie jak iloczyn skalarny , mnożenie macierz-wektor , mnożenie macierz-macierz i iloczyn macierzowy .

Poniższy przykład ilustruje użycie latarki za pośrednictwem jej interpretera REPL :

   

 
   
       
      
   

  >  a  =  pochodnia  .  rann  (  3  ,  4  )  >  =  a  -  0,2381  -  0,3401  -  1,7844  -  0,2615  0,1411  1,6249  0,1708  0,8299  -  1,0434  2,2291  1,0525  0,8465  [  latarka  .  DoubleTensor  o  wymiarze  3x4  ]  >  a  [  1  ]  [ 

	
 
   
       
    2  ]  -  0,34010116549482  >  a  :  wąski  (  1  ,  1  ,  2  )  -  0,2381  -  0,3401  -  1,7844  -  0,2615  0,1411  1,6249  0,1708  0,8299  [  latarka  .  DoubleTensor  o  wymiarach  2x4  ]  >  a  :  index  (  1  ,  torch  .  _ 

  
   
       
   

 
 LongTensor  {  1  ,  2  })  -  0,2381  -  0,3401  -  1,7844  -  0,2615  0,1411  1,6249  0,1708  0,8299  [  latarka  .  DoubleTensor  o  wymiarze  2  x4  ]  >  a  :  min  ()  -  1,7844365427828 

Pakiet latarki upraszcza również programowanie obiektowe i serializację , udostępniając różne wygodne funkcje, które są używane w jego pakietach. Funkcja torch.class (classname, parentclass) może służyć do tworzenia fabryk obiektów ( klas ). Kiedy konstruktor jest wywoływany, torch inicjuje i ustawia tabelę Lua ze zdefiniowaną przez użytkownika metatabelą , co sprawia, że ​​tabela jest obiektem .

Obiekty utworzone za pomocą fabryki palników również mogą być serializowane, o ile nie zawierają odniesień do obiektów, których nie można serializować, takich jak Lua coroutines i Lua userdata . Jednak dane użytkownika mogą być serializowane, jeśli są opakowane w tabelę (lub metatabelę), która udostępnia metody read() i write() .

nn

Pakiet nn służy do budowy sieci neuronowych . Jest podzielony na modułowe obiekty, które mają wspólny modułu . Moduły mają forward() i reverse() , które umożliwiają im odpowiednio sprzężenie zwrotne i propagację wsteczną . Moduły można łączyć za pomocą kompozytów modułów , takich jak Sequential , Parallel i Concat , aby tworzyć złożone wykresy dostosowane do zadań. Prostsze moduły, takie jak Linear , Tanh i Max tworzą podstawowe moduły składowe. Ten modułowy interfejs zapewnia automatyczne różnicowanie gradientu pierwszego rzędu . Poniżej znajduje się przykładowy przypadek użycia do zbudowania wielowarstwowego perceptronu przy użyciu modułów:

   
     
    
   >  mlp  =  nn  .  Sequential  ()  >  mlp  :  add  (  nn  .  Linear  (  10  ,  25  )  )  -- 10 wejść , 25 jednostek ukrytych  >  mlp  :  add  (  nn  .  Tanh  ( )  )  -- jakaś hiperboliczna funkcja transferu tangensa  >  mlp  :  add  (  nn  .  Liniowy  (  25  ,    
 

   1  )  )  -- 1 wyjście  >  =  mlp  :  do przodu  (  torch  .  rann  (  10  ))  -  0.1815  [  torch  .  Tensor  wymiaru  1  ]  _  

Funkcje strat są zaimplementowane jako podklasy Criterion , które mają podobny interfejs do Module . Posiada również forward() i reverse() odpowiednio do obliczania strat i wstecznej propagacji gradientów. Kryteria są pomocne w trenowaniu sieci neuronowej na klasycznych zadaniach. Typowymi kryteriami są średniokwadratowego błędu zaimplementowane w MSECriterion oraz kryterium entropii krzyżowej zaimplementowane w ClassNLLCriterion . Poniżej znajduje się przykład funkcji Lua, którą można wywoływać iteracyjnie w celu trenowania mlp na wejściu Tensor x , target Tensor y ze skalarną szybkością uczenia się :

    
     
    
       
  
     funkcja  gradUpdate  (  mlp  ,  x  ,  y  ,  learningRate  )  kryterium  lokalne  =  nn  .  ClassNLLCriterion  ()  pred  =  mlp  :  do przodu  (  x  )  local  err  =  kryterium  :  do przodu  (  pred  ,  y  );  mlp  :  zeroGradParameters  ();  lokalne  t  =   
   
  
 kryterium  :  wstecz  (  pred  ,  y  );  mlp  :  wstecz  (  x  ,  t  );  mlp  :  updateParameters  (  szybkość uczenia się  );  koniec 

Posiada również klasę StochasticGradient do uczenia sieci neuronowej z wykorzystaniem metody Stochastic gradient descent , choć pakiet optim zapewnia znacznie więcej opcji w tym zakresie, jak chociażby regularyzacja rozkładu pędu i masy .

Inne pakiety

Wiele pakietów innych niż powyższe oficjalne pakiety jest używanych z Torch. Są one wymienione w ściągawce latarki. Te dodatkowe pakiety zapewniają szeroką gamę narzędzi, takich jak równoległość, asynchroniczne wejście/wyjście, przetwarzanie obrazu i tak dalej. Można je zainstalować za pomocą LuaRocks , menedżera pakietów Lua, który jest również dołączony do dystrybucji Torch.

Aplikacje

Torch jest używany przez Facebook AI Research Group, IBM , Yandex i Idiap Research Institute . Torch został rozszerzony do użytku na Androidzie i iOS . Został wykorzystany do zbudowania implementacji sprzętowych dla przepływów danych, takich jak te występujące w sieciach neuronowych.

Facebook wydał zestaw modułów rozszerzeń jako oprogramowanie typu open source.

Zobacz też

Linki zewnętrzne