Sveučilište u Zagrebu
|
|
- Polonca Govekar
- пре 5 година
- Прикази:
Транскрипт
1 SVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA SEMINAR Programska podrška za duboko učenje Frano Rajič Voditelj: Siniša Šegvić Zagreb, travanj, 2019
2 Sadržaj 1. Uvod Opis programske podrške Biblioteka Numpy Stvaranje polja i osnovne operacije Linearna algebra Biblioteka pillow-simd i libjpeg-turbo Biblioteka PyTorch Duboko učenje i PyTorch Kratki pogled u prošlost Zašto PyTorch CUDA i biblioteka cudnn Grafička procesorska jedinica i sramotno lako paraleliziranje Nvidia i GPGPU PyTorch dolazi s CUDA-om GPU može biti sporiji od CPU-a Biblioteka matplotlib Opis minimalističkog programa Zaključak Sažetak Literatura... 37
3 1. Uvod Smjestimo za početak duboko učenje u odgovarajući kontekst umjetne inteligencije i strojnog učenja. Umjetna inteligencija je dio računalne znanosti koji se bavi razvojem sposobnosti računala da obavljaju zadaće za koje je potreban određeni oblik inteligencije, što znači da se mogu snalaziti u novim prilikama, učiti nove koncepte, donositi zaključke, razumjeti prirodni jezik, raspoznavati prizore i dr. Nadalje, strojno učenje je dio umjetne inteligencije koja se bavi oblikovanjem algoritama kojima umjetna inteligencija može učiti, odnosno svoju učinkovitost poboljšavaju na temelju empirijskih podataka. Konačno, duboko učenje je grana strojnog učenja koja koristi neuronske mreže da bi obavljala svoje zadaće i učila. Temelji se na predstavljanju podataka složenim reprezentacijama do kojih se dolazi slijedom naučenih nelinearnih transformacija. Metode dubokog učenja svoju primjenu pronalaze u izazovnim područjima gdje je dimenzionalnost podataka iznimno velika: računalnom vidu, obradi prirodnog jezika ili razumijevanju govora. Najčešće se dijeli u tri široke kategorije: 1) Nadzirano učenje - Računalu je dan ulaz i željeni izlaz, a cilj je pronaći pravila koja preslikavaju ulaze u izlaze. 2) Nenadzirano učenje - Predani su podaci bez ciljne vrijednosti, treba pronaći pravilnost u podacima. 3) Podržano/ojačano učenje - Učenje optimalne strategije na temelju pokušaja s odgođenom nagradom. Računalni program mora izvršiti određeni cilj bez da mu se sugerira je li došao blizu cilja. Zahvaljujući svojoj opsežnosti te jednostavnosti pisanja programa, programski jezik Python jedan je od idealnih izbora za pisanje programa vezanih za strojno učenje općenito. Stoga su za jednostavnije korištenje algoritama dubokog učenja stvorene brojne Python biblioteke koje korisniku nude kako visoku efikasnost tako i vrlo jednostavnu primjenu algoritama u svojem programu. Te biblioteke pružaju funkcionalnost vektorske obrade podataka, učitavanja i obrade slika, automatsku diferencijaciju, podršku za GPU i iscrtavanje rezultata. U nastavku ovog rada se iznosi pregled poznatih biblioteka za spomenute funkcionalnosti, a uzgred tomu opisuje minimalistički program za klasifikaciju na FashionMNIST skupu podataka. 3
4 2. Opis programske podrške Programska podrška je u Pythonu ostvarena kroz skup raznih biblioteka. Među njima su najpopularnije i najkorištenije sljedeće: numpy za vektorsku obradu podataka libjpeg-turbo i pillow-simd za učitavanje i obradu slika PyTorch za automatsku diferencijaciju cudnn za GPU podršku matplotlib za iscrtavanje rezultata. Slika 2.1 Python logo 4
5 2.1 Biblioteka Numpy Programski jezik Python osigurava bogat skup podatkovnih struktura visoke razine: liste za enumeraciju kolekcija objekata, rječnike za izgradnju hash tablica, itd. Međutim, te strukture nisu prikladne za numeričko računanje visokih performansi pa je upravo zbog toga biblioteka Numpy postala standardna reprezentacija numeričkih podataka u Pythonu. Ona nudi podršku za velike, višedimenzionalne nizove i matrice, kao i izvođenje brojnih matematičkih funkcija nad njima. Implementirana je tako da osigurava brzo i efikasno izvođenje tih funkcija i time pruža znatno bolje performanse u odnosu na standardne Python strukture. Tri tehnike koje nadasve koristi da bi u tome uspjela su: vektorska obrada podataka, izbjegavanje kopiranja podatka u memoriji i minimiziranje broja operacija. Osnovna funkcionalnost biblioteke je struktura podataka "ndarray" koja predstavlja homogeno, višedimenzionalno polje. Neke od najvažnijih operacija koje se mogu izvršavati nad poljem uključuju: množenje i transponiranje matrica, rješavanje sustava jednadžbi, množenje i normalizacija vektora. Slika 2.2 NumPy logo Stvaranje polja i osnovne operacije Primjer u nastavku demonstrira stvaranje polja te neke od osnovnih operacija koje pruža NumPy biblioteka. 1. >>> ############################################################### 2. >>> ### PRIMJER KORIŠTENJA BIBLIOTEKE NUMPY - OSNOVNE OPERACIJE ### 3. >>> ############################################################### 4. >>> 5. >>> #Učitavanje biblioteke 6. >>> import numpy as np 7. >>> 8. >>> #Stvaranje vektora u obliku retka 9. >>> vector_row = np.array([1,2,3]) #np.array stvara primjerak od ndarray 5
6 10. >>> 11. >>> #Stvaranje vektora u obliku stupca 12. >>> vector_column = np.array([[1],[2],[3]]) 13. >>> 14. >>> print(vector_row[2]) #Odaberi treći element vektora >>> print(vector_row[:]) #Odaberi sve elemente vektora 17. [1 2 3] 18. >>> print(vector_row[0:2]) #Odaberi elemente vektora od prvog do drugog, bez trećeg 19. [1 2] 20. >>> print(vector_row[-1]) #Odaberi posljednji element vektora >>> 23. >>> #Stvaranje dvodimenzionalne matrice 24. >>> #Moguće je naznačiti tip podataka dodatnim argumentom dtype 25. >>> matrix = np.array([[1,2,3],[4,5,6]], dtype=np.int8) 26. >>> print(matrix) 27. [[1 2 3] 28. [4 5 6]] 29. >>> 30. >>> print(matrix[1,1]) #Odaberi 2. redak i 2. stupac matrice >>> print(matrix[:,1:2]) #Odaberi sve retke i drugi stupac 33. [[2] 34. [5]] 35. >>> 36. >>> #Dohvaćanje informacija o matrici 37. >>> print(matrix.shape) #Dohvati broj redaka i stupaca 38. (2, 3) 39. >>> print(matrix.size) #Dohvati broj elemenata (reci*stupci) >>> print(matrix.ndim) #Dohvati broj dimenzija (kod nas dvodimenzionalno polje) >>> 44. >>> #Preoblikovanje polja 45. >>> print(matrix.reshape(6,1)) #Preoblikovanje iz 2x3 u 6x1 46. [[1] 47. [2] 48. [3] 49. [4] 50. [5] 51. [6]] 52. >>> print(matrix.reshape(1,-1))#preoblikovanje gdje 1 znači koliko god je potrebno 53. [[ ]] 54. >>> print(matrix.flatten()) #Za pretvaranje u 1D polje, isto kao reshape(-1,1) 55. [ ] 56. >>> 57. >>> #Operacije nad elementima 58. >>> print(matrix+1) #Dodaj 1 na svaki element matrice 59. [[2 3 4] 60. [5 6 7]] 61. >>> print(matrix*2) #Pomnoži svaki element matrice s [[ 2 4 6] 63. [ ]] 64. >>> print(np.sin(matrix)) #Izračunaj sinus svakog elementa matrice 65. [[ ] 66. [ ]] 6
7 67. >>> print(matrix + 2*matrix) #Zbrajanje dviju matrica - samo ako su kompatibilne! 68. [[ 3 6 9] 69. [ ]] 70. >>> for i in np.ndindex(matrix.shape): #Iteracija nad svim elementima print(i, " --> ", matrix[i]) (0, 0) --> (0, 1) --> (0, 2) --> (1, 0) --> (1, 1) --> (1, 2) --> >>> #Definiranje novih operacija 80. >>> add_5 =lambda i: i+5 #Funckija definirana lambdom koja dodaje 5 na dani broj 81. >>> vectorized_add_5= np.vectorize(add_5) #Pretvaranje u funkciju nad vektorima 82. >>> print(vectorized_add_5(matrix)) #Primjeni funkciju na sve elemente matrice 83. [[ 6 7 8] 84. [ ]] 85. >>> print(matrix) #Matrica je nepromjenjena jer nismo pridodjelili novu vrijednost 86. [[1 2 3] 87. [4 5 6]] 88. >>> 89. >>> #U potrazi za min i max vrijednostima 90. >>> print(np.max(matrix)) #Pronađi najveći element >>> print(np.argmax(matrix)) #Pronađi index najvećeg elementa >>> print(np.max(matrix,axis=0)) #Pronađi najveći element u svakom stupcu 95. [4 5 6] 96. >>> print(np.max(matrix,axis=1)) #Pronađi najveći element u svakom redku 97. [3 6] 98. >>> print(np.min(matrix)) #Pronađi najmanji element >>> 101. >>> #Malo statistike 102. >>> print(np.mean(matrix)) #Srednja vrijednost >>> print(np.std(matrix)) #Standardna devijacija >>> print(np.var(matrix)) #Varijanca Primjer 2.1 Korištenje osnovne funkcionalnosti koju osigurava biblioteka NumPy 7
8 2.1.2 Linearna algebra Biblioteka NumPy pruža velik broj funkcija za rad s dvodimenzionalnim poljima. U nastavku je primjer korištenja osnovnih funkcija. 1. >>> ############################################################## 2. >>> ### PRIMJER KORIŠTENJA BIBLIOTEKE NUMPY - LINEARNA ALGEBRA ### 3. >>> ############################################################## 4. >>> 5. >>> #Učitavanje biblioteke numpy 6. >>> import numpy as np 7. >>> #Učitavanje dodatnih funkcija iz biblioteke numpy 8. >>> from numpy.random import rand 9. >>> from numpy.linalg import solve, inv 10. >>> 11. >>> #Stvaranje polja 12. >>> a = np.array([[1, 2, 3], [3, 4, 6.7], [5, 9.0, 5]]) #Polje dimenzija 3x3 13. >>> b = np.array([3, 2, 1]) #Polje dimenzija 1x3 14. >>> c = rand(3, 3) #Polje 3x3 s random vrijednostima 15. >>> 16. >>> #Što je u polju c? 17. >>> print(c) 18. [[ ] 19. [ ] 20. [ ]] 21. >>> 22. >>> #Transponiranje, inverz i rješavanje sustava 23. >>> print(a.transpose()) #Transponiranje matrice 24. [[ ] 25. [ ] 26. [ ]] 27. >>> print(inv(a)) #Računanje inverza matrice 28. [[ ] 29. [ ] 30. [ ]] 31. >>> print(solve(a, b)) #Rješavanje jednadžbe ax = b 32. [ ] 33. >>> 34. >>> #Množenje matrica, determinanta i rang matrice 35. >>> print(np.dot(a, c)) #Množenje dviju matrica (dot product) 36. [[ ] 37. [ ] 38. [ ]] 39. >>> print(a@c) #Također množenje matrica 40. [[ ] 41. [ ] 42. [ ]] 43. >>> print(np.linalg.det(a)) #Izračunaj determinantu matrice >>> print(np.linalg.matrix_rank(a)) #Izračunaj rang matrice Primjer 2.2 Korištenje funkcija linearne algebre biblioteke NumPy 8
9 2.2 Biblioteka pillow-simd i libjpeg-turbo Kao podrška za procesiranje slike u Pythonu postoji biblioteka pillow-simd. Ona omogućuje brzo izvođenje obrade nad slikama kao što je rotacija, mijenjanje veličine i afina transformacija, vršenje operacija nad pikselima i filtriranje. Veliku brzinu izvođenja zahvaljuje korištenju SIMD pristupa (Single Instruction, Multiple Data) u kojemu se više podataka istovremeno procesira u jednoj instrukciji procesora. Kako bi imao veliku brzinu učitavanja slika, pillow-simd koristi besplatnu biblioteku libjpeg-turbo koja implementira JPEG kodek. Svoju funkcionalnost enkodiranja i dekodiranja JPEG slika pri visokim performansama libjpeg-turbo također zahvaljuje korištenju SIMD pristupa. U nastavku je jednostavan primjer korištenja biblioteke pillow-simd. 1. ################################################# 2. ### PRIMJER KORIŠTENJA BIBLIOTEKE PILLOW-SIMD ### 3. ################################################# # Učitavanje potrebnih dijelova biblioteke 6. from PIL import Image 7. import PIL.ImageOps colorimage = Image.open("C:/Users/Frano/ana3/raytracer.jpg") # Stvori Image objekt 10. colorimage.show() # Prikaži sliku rotated = colorimage.rotate(45) # Rotiraj za 45 stupnjeva 13. rotated.show() # Prikaži rotiranu sliku inverted = PIL.ImageOps.invert(colorImage) # Invertiraj pixele slike 16. inverted.show() # Prikaži invertiranu sliku Primjer 2.3 Korištenje biblioteke pillow-simd Slika 2.3.Slike prkazuju redom originalnu, rotiranu i sliku s invertiranim pikselima 9
10 2.3 Biblioteka PyTorch PyTorch je programski okvir za duboko učenje te paket za znanstveno računanje u Pythonu koji sadrži sve potrebno za jednostavnu implementaciju dubokog učenja uz akceleraciju računanja korištenjem grafičke procesorske jedinice. Aspekt znanstvenog računarstva je prije svega rezultat PyTorch-ove tensor biblioteke i operacija nad njom. Slika 2.4. PyTorch logo Duboko učenje i PyTorch Tenzor je višedimenzionalni niz i vrlo je sličan ndarray-u biblioteke NumPy. Na konceptualnoj razini su identična stvar, a u praksi se bez problema u jednoj liniji koda prebaci iz jednog u drugi, kao što se može vidjeti u primjeru 2.4. Štoviše, tenzor je uveden kao zamjena za ndarray koja koristi GPU snagu. 1. >>> import numpy as np #Učitavanje biblioteke NumPy 2. >>> import torch #Učitavanje biblioteke PyTorch 3. >>> 4. >>> n = np.array([1,2,3]) #Stvaranje ndarray objekta 5. >>> print(n) 6. [1 2 3] 7. >>> 8. >>> t = torch.as_tensor(n) #Stvaranje tenzora iz ndarraya 9. >>> print(t) 10. tensor([1, 2, 3], dtype=torch.int32) 11. >>> 12. >>> n_again = t.numpy() #Tenzor pretvoren u ndarray 13. >>> print(n_again) 14. [1 2 3] Primjer 2.4. Primjer prikazuje prelazak iz ndarray objekta u tensor objekt, odnosno iz tensor objekta u ndarray. 10
11 PyTorch tenzori imaju ugrađenu GPU podršku te se operacije nad tenzorima mogu izvoditi na grafičkim procesorskim jedinicama. Sasvim je jednostavno premjestiti tenzore na GPU jezgre kao i skinuti ih s njih, ako je podržan GPU sustava. Koliko to znači i zašto bi koristili GPU za računanje s tenzorima je opisano u poglavlju 2.4. Tenzori su vrlo bitni za duboko učenje i neuronske mreže jer su osnovna podatkovna struktura koja se koristi za izgradnju i treniranje neuronskih mreža. Pored njih, PyTorch naravno nudi mnogo više u smislu izgradnje i treniranja neuronskih mreža. Sljedeća tablica prikazuje listu PyTorch paketa i njihovih odgovarajućih opisa. Paket torch torch.nn torch.autograd torch.nn.functional torch.optim torch.utils torchvision Opis Paket najviše razine, sadrži tenzor biblioteku. Podpaket koji sadrži module i proširive klase za izgradnju neuronskih mreža. Podpaket koji podržava operacije diferencijacije. Funkcionalno sučelje koje sadrži tipične operacije korištene za izgradnju neurosnkih mreža kao što su funkcije gubitaka, aktivacijske funkcije i operacije konvolucija. Podpakat koji je sadrži standardne operacije optimizacije kao što su SGD i Adam. Podpaket koji sadrži utility klase za primjerice učitavanje podataka, koji olakšavaju predobradu podataka. Paket koji omogućuje pristup popularnim skupovima podataka, arhitekturama modela i transformacijama slika za računalni vid. Tablica 2.1. Opis paketa biblioteke PyTorch 11
12 U nastavku je dan primjer korištenja razreda Tensor i osnovnih operacija nad njim. In [1]: from future import print_function import torch Konstruiranje neinicijalizirane 5x3 matrice: In [2]: x = torch.empty(5, 3) print(x) tensor([[1.0561e-38, e-38, e-39], [8.9082e-39, e-39, e-39], [1.0561e-38, e-38, e-38], [9.5510e-39, e-39, e-39], [9.2755e-39, e-39, e-43]]) Konstruiranje nasumično inicijalizirane matrice: In [3]: x = torch.rand(5, 3) print(x) tensor([[0.2087, , ], [0.9154, , ], [0.7495, , ], [0.6271, , ], [0.8370, , ]]) Konstruiranje matrice inicijalizirane nulama, koja sadrži podatke tipa "long": In [4]: x = torch.zeros(5, 3, dtype=torch.long) print(x) tensor([[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]) 12
13 Konstruiranje tenzora s danim vrijednostima: In [5]: x = torch.tensor([5.5, 3]) print(x) tensor([5.5000, ]) In [6]: Stvaranje tenzora na temelju postojećeg: x = x.new_ones(5, 3, dtype=torch.double) print(x) x = torch.randn_like(x, dtype=torch.float) print(x) tensor([[1., 1., 1.], [1., 1., 1.], [1., 1., 1.], [1., 1., 1.], [1., 1., 1.]], dtype=torch.float64) tensor([[ , , ], [ , , ], [ , , ], [ , , ], [ , , ]]) Dohvati dimenzije tenzora: In [7]: print(x.shape) torch.size([5, 3]) Zbrajanje tenzora: In [8]: y = torch.rand(5, 3) print(x + y) tensor([[ , , ], [ , , ], [ , , ], [ , , ], [ , , ]]) 13
14 Zbroji x i y te pohrani u y: In [9]: y.add_(x) print(y) tensor([[ , , ], [ , , ], [ , , ], [ , , ], [ , , ]]) Operacije koje mijenaju tenzor su naznačene s _. Tako primjerice i ove operacije mijenjaju tenzor y: y.copy_(x), y.t_(). Za mijenjaje dimenzija tenzora koristimo metodu view : In [10]: x = torch.randn(4, 4) y = x.view(16) z = x.view(-1, 8) # -1 označava da se dimenzija određuje na temelju ostalih print(x.size(), y.size(), z.size()) torch.size([4, 4]) torch.size([16]) torch.size([2, 8]) Kod tenzora s jednim elementom možemo taj element dohvatiti pozivom.item() : In [11]: x = torch.randn(1) print(x) print(x.item()) tensor([ ]) Primjer 2.5. Korištenje razreda Tensor te osnovne operacije nad njim Slično kao i NumPy ndarray objekti, PyTorch tenzori osiguravaju velik broj funkcionalnosti kao što su transponiranje matrice, razni načini indeksiranja elemenata, mnogobrojne matematičke operacije, linearna algebra itd. Kako je primjer dan za ndarray u prethodnom poglavlju za te stvari, tako ovdje neće biti ponovljen. 14
15 2.3.2 Kratki pogled u prošlost Inicijalno izdanje PyTorch-a bilo je u listopadu 2016., a prije stvaranja PyTorch-a, postojao je i još uvijek postoji okvir zvan Torch. Torch je programski okvir za strojno učenje koji postoji već duže vrijeme i temelji se na Lua programskom jeziku. Veza između PyTorch-a i Lua verzije postoji jer mnogi programeri koji održavaju Lua verziju su pojedinci koji su stvorili PyTorch. Soumith Chintala je zaslužan za pokretanje PyTorch projekta, a njegov razlog za stvaranje PyTorch-a je prilično jednostavan - Lua verzija Torcha postaje zastarjela pa je tako potrebna novija verzija napisana u Pythonu. Kako je Soumith Chintala pri pokretanju PyTorcha radio u Facebook AI istraživačkoj skupini (i na dan pisanja ovog rada također radi), PyTorch se često naziva Facebookovim. Međutim, postoji mnoge druge organizacije koje koriste PyTorch, primjerice Twitter i Salesforce. Slika 2.5. Soumith Chintala Slika 2.6. Facebook AI Research group logo 15
16 2.3.3 Zašto PyTorch Kada gradimo neuronske mreže s PyTorchom, vrlo smo blizu programiranju neuronskih mreža od nule. Iskustvo programiranja u PyTorchu je najbliže onome što se stvarno događa u neuronskim mrežama. Nakon korištenja PyTorcha, lako je vidjeti kako proces funkcionira krene li se iz ničega u čistom Pythonu, zbog čega je PyTorch odličan za početnike i daje dublje razumijevanje neutronskih mreža i dubokog učenja u cjelini. Za takvu prirodu biblioteke je zaslužna filozofija koje se programeri iza PyTorcha drže, a koja u središte pozornosti postavlja neuronske mreže, ne sam okvir, i može se sažeti u ovih par točaka: Stay out of the way (skloni se s puta programeru što je više moguće te dopusti da se fokusira na neuralne mreže umjesto na framework) Cater to the impatient (pobrinuti se za nestrpljive) Promote linear code-flow (promicanje linearnog protoka koda) Full interop with the Python ecosystem (potpuna povezanost s Python ekosustavom) Be as fast as anything else (biti brzi kao bilo što drugo ponuđeno) S perspektive ulaganja znanja, PyTorch se može smatrati sigurnijom opcijom zato što ga Facebook podupire i izgrađen je za Python, jezik s velikom i dalje rastućom zajednicom dubokog učenja. Uz visoku integriranost s Pythonom, PyTorch je lagan programski okvir u pogledu prethodno opisane kombinacije apstrakcije i jednostavnosti te se može lakše prilagoditi brzo razvijajućem svijetu dubokog učenja. Stoga je razumna tvrdnja da će PyTorch dugovječno ostati korišteni programski okvir za duboko učenje. Dodatna PyTorch karakteristika je prikladnost za istraživanje koju duguje svojem tehničkom dizajnu. PyTorch je izgrađen tako da u osnovi koristi dinamičke računske grafove za provođenje računanja na tenzorima u neuronskoj mreži. Kako bismo optimizirali neuronske mreže, moramo računati derivacije, a da bismo to učinili pomoću računala, programski okviri dubokog učenja koriste upravo računske grafovima. Dinamički računski grafovi se stvaraju tijekom računanja, u odnosu na statičke koji su u potpunosti određeni još prije samih operacija. Najnovije istraživačke teme dubokog učenja zahtijevaju ili imaju veliku korist upravo od korištenja dinamičkih grafova 16
17 2.4 CUDA i biblioteka cudnn cudnn je biblioteka za duboke neuronske mreže koja pruža akceleraciju računanja korištenjem grafičke procesorske jedinice. Za razumijevanje što cudnn odnosno CUDA nudi, najprije ću se dotaknuti paralelizacije i grafičkih procesorska jedinica Grafička procesorska jedinica i sramotno lako paraleliziranje GPU je procesor namijenjen specijaliziranim izračunima, dok s druge strane centralna procesorska jedinica (CPU) dobro izvodi opće proračune. Zbog toga GPU može biti mnogo brži u proračunavanju od CPU-a, ovisno o vrsti izračuna koji se izvodi. Tip računanja koji je najprikladniji za GPU je izračun koji se može obaviti paralelno. Paralelizacija je vrsta računanja gdje se određeni račun može razbiti u nezavisne manje izračune, koji se zatim mogu izvoditi istovremeno. Rezultati manjih izračuna se zatim kombiniraju (ili sinkroniziraju), da bi se dobio rezultat izvornog većeg izračuna. Kako bi razbijanje većeg zadatka imalo smisla, mora postojati dovoljan broj jezgri koje bi zadužili za manje proračune, a broj jezgri ovisi o korištenom hardvera. Jezgre su jedinice koje zapravo računaju unutar procesora, a današnji CPU obično ima 4, 8 ili 16 jezgri, za razliku od GPU koji imaju na tisuće. Mnogobrojnost jezgri čini grafičke procesorske jedinice posebno prikladnima za paralelno obavljanje zadataka. Ako se računanje može obaviti paralelno, možemo ga ubrzati pomoću pristupa paralelnog programiranja i GPU-ova. Neuronske mreže pa i duboko učenje koje ih koristi se sramotno lako paraleliziraju. Sramotno lako paralelizirajući proračunski zadatak je onaj gdje je potrebno malo ili nimalo napora kako bi se cjelokupni zadatak razdvojio na skup manjih zadataka koji će se paralelno izračunati. Kod takvih zadataka se lako vidi da su svi zadatci u skupu manjih zadataka neovisni jedni u odnosu na druge. Kako se neuronske mreže sramotno lako paraleliziraju, grafičke procesorske jedinice su osobito pogodne za potrebne izračune u dubokom učenju Nvidia i GPGPU U početku su glavne zadaće koje su ubrzane pomoću GPU-a bile usko vezane uz računalnu grafiku pa se otuda i pojavljuje naziv grafičke procesne jedinice, no posljednjih se godina pojavilo mnogo više paralelnih zadataka. Jedan od takvih zadataka je duboko učenje. Stoga funkcionalnost GPU-a da obavlja i operacije opće namjene odnosno GPGPU (general purpose graphical processing unit) stječe sve veću važnost. Nvidia je tehnološka tvrtka koja dizajnira GPU-ove. Pionir je u prostoru grafičkih procesorskih jedinica opće namjene (GPGPU). Međutim, Nvidia se prema GPU 17
18 računanju opće namjene odnosi kao da je istovjetno GPU računanju, ističući važnost i očekujući da se u budućnosti to i podrazumijeva pod GPU. Slika 2.7. Nvidia logo CEO Jensen Huang's predvidio je GPU računanje vrlo rano, zbog čega je softverska platforma CUDA nastala prije gotovo 10 godina. CUDA je kreirana kao platforma koja se spaja s Nvidia GPU hardverom i programerima olakšava izradu softvera koji ubrzava računanje koristeći paralelnu procesorsku snagu Nvidia GPU-a. Nvidia GPU je hardver koji omogućuje paralelne računanje, dok je CUDA softver koji pruža API programerima za korištenje. Kao rezultat toga je za korištenje CUDA-e potreban Nvidia GPU, a CUDA se može besplatno preuzeti i instalirati s Nvidia web stranice. Programeri koriste CUDA preuzimanjem CUDA alata. Uz alat dolaze specijalizirane biblioteke poput cudnn (CUDA Deep Neural Network) koja sadrži implementacije algoritama dubokog učenja velike brzine PyTorch dolazi s CUDA-om Jedna od prednosti korištenja PyTorch-a ili bilo kojeg drugog API-ja za neuronske mreže jest da je korištenje paralelizma unaprijed ugrađeno. Zbog toga se programer neuronske mreže može više usredotočiti na izgradnju neuronskih mreža, a manje na probleme s performansama. U PyTorch se uključivanje CUDA nudi već pri samom početku pri preuzimanju PyTorcha, nema dodatnih preuzimanja. Sve što trebamo je imati podržan Nvidia GPU i možemo iskoristiti CUDA koristeći PyTorch. Ne moramo izravno znati koristiti CUDA API. Kako izgleda preuzimanje odnosno instalacija PyTorcha sa službene stranice je prikazano na slici ispod. 18
19 Slika 2.8. Instalacija PyTorcha nudi odmah odabir željene CUDA verzije Iskoristiti CUDA je izuzetno lako u PyTorch-u. Ako želimo da se određeno računanje izvrši na GPU-u, možemo narediti PyTorch-u da to učini pozivanjem funkcije cuda() na željenom tenzoru. 1. >>> import numpy as np #Učitavanje biblioteke NumPy 2. >>> import torch #Učitavanje biblioteke PyTorch 3. >>> 4. >>> t = torch.tensor([1,2,3]) #Tenzor se predpostavljeno stvori na CPU 5. >>> t 6. tensor([1, 2, 3]) 7. >>> 8. >>> t = t.cuda() #Za prebacivanje računanja s tim tenzorom na GPU 9. >>> t 10. tensor([1, 2, 3], device='cuda:0') #Računanje se izvodi na GPU s indeksom 0 Primjer X Korištenje GPU u PyTorchu GPU može biti sporiji od CPU-a Vidjeli smo da računanje možemo provesti proizvoljno na CPU ili GPU, no zašto jednostavno sve ne proračunavamo na GPU? Odgovor na to pitanje je da je GPU brži samo za specifične zadatke. Možemo primjerice susresti situaciju da će usko grlo biti prijenos podataka s CPU na GPU, što će značajno usporiti izvršavanje zadatka. Frekventno pomicanje relativno malih proračunskih zadataka na GPU primjerice uzrokuje tu situaciju. Stoga ćemo radije koristiti CPU za jednostavnije zadatke, a susretnemo li zadatke proračunski teške za izvest koji se mogu paralelizirati, onda ćemo njih radije premjestiti na GPU. 19
20 2.5 Biblioteka matplotlib Matplotlib je open-source biblioteka za iscrtavanje 2D figura. Dizajnirana je za jednostavnu upotrebu, ali pruža velik broj mogućnosti kroz objektno orijentirani API za ugradbu grafova u aplikacije kroz grafička sučelja poput Tkinter. Qt, itd. U okviru dubokog učenja se često koristi za vizualiziranje rezultata Primjer jednostavnog programa koji prikazuje graf sinusoidnog signala te ga sprema kao sliku test.png dan je u nastavku. 1. import matplotlib 2. import matplotlib.pyplot as plt 3. import numpy as np # Podatci za crtanje 6. t = np.arange(0.0, 2.0, 0.01) 7. s = 1 + np.sin(2 * np.pi * t) fig, ax = plt.subplots() 10. ax.plot(t, s) ax.set(xlabel='vrijeme(s)', ylabel='napon (mv)', 13. title='sinusoidni signal') 14. ax.grid() fig.savefig("test.png") 17. plt.show() Slika 2.7. Iscrtani graf za prethodno dani isječak koda 20
21 3. Opis minimalističkog programa Za stvaranje umjetne duboke neuronske mreže su nužne dvije komponente. Prva je programski kod koji opisuje kako neuronska mreža sveukupno funkcionira, a druga je skup podataka odnosno dataset. Podatci su ono na temelju čega umjetna neuronska mreža uči i napreduje te bez njih treniranje mreže ne bi bilo moguće. Podatci se kasnije također predaju mreži kako bi riješila zadaću za koju je izgrađena. Zanimljivo je primijetiti da je najteži dio dubokog učenja upravo prikupljanje skupa podataka. Prije nego nastavim na programski kod minimalističkog programa, opisati ću kratko MNIST i FashionMNIST skup podataka jer će podatke iz FashionMNISU-a koristiti neuronska mreža iz minimalističkog programa za treniranje. Skup podataka MNIST (Modified National Institute of Standards and Technology database) je poznat dataset ručno napisanih znamenki koji je sakupljen 1980-ih. Svojevrstan je Hello world u svijetu dubokog učenja jer je najčešće prvi dataset koji programer dubokog učenja iskoristi. Nudi 60 tisuća slika u skupu podataka za treniranje mreže te dodatnih 10 tisuća slika u skupu podataka za testiranje razvijene neuronske mreže. Sve slike su klasificirane u kategorije od 0 do 9, ovisno o znamenki koja je na prikazana na slici. Homogeno su raspoređene, što znači da je svaka znamenka zastupljena u jednakom broju. Dio MNIST-a je prikazan na slici 3.1. Slika 3.1. Dio slika iz MNIST dataseta 21
22 FashionMNIST je za razliku od MNIST-a znatno noviji. Objavljen je u kolovozu i bazira se na slikama artikala odjeće i obuće iz njemačke online trgovine zalando.de. Tim Zalando Research koji je dio zaladno.de trgovine je sastavio FashionMNIST s namjerom da postupno zamijeni MNIST, zbog čega ima isti broj slika u skupu za treniranje i testiranje, jednak oblik slika te jednak broj klasa. 10 klasa koje čine FashionMNIST su navedene u tablici 2.2., a isječak iz skupa slika je prikazan na slici 3.2. Oznaka Opis 0 Majica 1 Hlače 2 Džemper 3 Haljina 4 Kaput 5 Sandale 6 Košulja 7 Tenisice 8 Torba 9 Čizma za gležanj Tablica 2.2. Oznake predmeta u Fashion MNIST datasetu 22
23 Slika 3.2. Dio slika iz FashionMNIST dataseta Razlozi za zamjenu MNIST-a su sljedeći: MNIST je postao prelagan dataset na kojem pojedine konvolucijske mreže dostižu čak 99.7% točnosti na testiranju MNIST nije reprezentativan skup podataka za moderne probleme računalnog vida. 23
24 FashionMNIST je kao i MNIST moguće dohvatiti putem Python biblioteke torchvision. Torchvision uz biblioteku torch čini PyTorcha, a odvojena je od torcha jer sadrži gotove skupove podataka, gotove arhitekture modela neuronskih mreža te specifične transformacije nad slikama korištene općenito u računalnom vidu. Konačno, krenimo na opis minimalističkog programa. Program postupno stvara, trenira i testira jedan model duboke neuronske mreže. Radni tijek ovog programa kao i općenito razvijanja neuronske mreže je sljedeći: 1. Pronaći skup ili stvoriti skup podataka s kojima želimo da neuronska mreža radi. Dataset učitati te stvoriti dataloader koji će olakšati kasnije učitavanje podataka. 2. Modeliranje arhitekture neuronske mreže, odnosno definiranje slojeva koji ju grade i načina na koji se će se ulaz kretati kroz slojeve mreže. Potom i instanciranje definirane mreže. 3. Pripremiti treniranje definiranjem funkcije treniranja, što uključuje odabir optimizacijskog algoritma, funkciju gubitka, itd. 4. Trenirati mrežu hrana su podatci iz odabranog skupa podataka koje su učitani dataloaderom. 5. Koristiti istreniranu mrežu najprije za testiranje kako bi se vidjela njena uspješnost tj. točnost. 6. Na temelju rezultata testiranja ponavljati korake dok ne budemo zadovoljni s dobivenim rezultatima istrenirane neuronske mreže. 7. Koristiti dobro istreniranu mrežu za rješavanje novih problema, primjerice za prepoznavanje slika koje nisu do sada bile u skupu podataka. Programski kod programa koji sam napisao i smjestio u nastavku se bavi koracima te naposljetku razvije mrežu koja daje točnost od % na testnom datasetu. Kod je popraćen komentarima koji objašnjavaju što se to točno događa. 24
25 0. korak - učitavanje potrebnih biblioteka Učitavanje svih potrebnih PyTorch biblioteka In [1]: import torch import torch.nn as nn import torch.optim as optim import torch.nn.functional as F import torchvision import torchvision.transforms as transforms Učitavanje standardnih Python paketa za data science In [2]: import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.metrics import confusion_matrix #from plotcm import plot_confusion_matrix import pdb torch.set_printoptions(linewidth=120) 1. korak - dataset i dataloader Pored njihovog stvaranja ćemo također nešto detaljnije zaviriti u dataset i pogledati kako su slike spremljene u njemu. Za stvaranje dataseta i dataloadera koristimo PyTorch razrede: torch.utils.data.dataset torch.utils.data.dataloader Za istancu FashionMNIST dataseta koristimo torchvision koji sam dohvaća dataset koji zatražimo: 25
26 In [3]: train_set = torchvision.datasets.fashionmnist( root='./data' #Lokacija gdje želimo spremati dohvaćene podatke,train=true #True ako je dataset za treniranje,download=true #True ukoliko bi dataset trebao biti skinut,transform=transforms.compose([ #Kompozicija transformacija koje će se izvesti nad elementom dataseta #Ovdje želimo sve učitane slike pretvoriti u tensor objekte transforms.totensor() ]) ) Stvorimo Dataloader wrapper za učitani training set. Dataloader omata dataset te osigurava kasnije potrebnu funkcionalnost pristupa podatcima. In [4]: train_loader = torch.utils.data.dataloader(train_set,batch_size=1000,shuffle=true ) Pogledajmo najprije što je u train_set. Koja je duljina tog tenzora? Koji su labeli unutar njega? Je li dataset homogen - odnosno je li ima jednak broj slika svake klase? In [5]: print(len(train_set)) #Duljina seta print(train_set.targets) #Koji su labeli točne klasifikacije print(train_set.targets.bincount()) # Provjerimo je li set balansiran tensor([9, 0, 0,..., 3, 0, 5]) tensor([6000, 6000, 6000, 6000, 6000, 6000, 6000, 6000, 6000, 6000]) Zavirimo u prvu sliku iz seta. Pytonov način za dobiti prvi element iz nečega iterabilnog je općenito next(iter(neki_iterabilni_objekt)), gdje iter() dohvati iterator nad iterabilnim objektom, a next uzme sljedeći element iteratora. Zanima nas kako izgledaju pohranjeni podatci u datasetu i zato dobiveni uzorak sample razdvajamo najprije na njegove dvije komponente - sliku i label, a dalje doznamo da je slika tenzor dimenzija 1x28x28, a label obični integer gdje broj 9 označava da slika prikazuje gležnjaču. Sliku iscrtavamo pomoću biblioteke matplotlib. 26
27 In [6]: sample = next(iter(train_set)) image, label = sample #Na prvom mjesto uzorka je slika, na drugom label print('types:', type(image), type(label)) #Koje su vrste slika odnosno label print('shapes:', image.shape, torch.tensor(label).shape) #Kojeg su oblika #Label je samo broj (int) pa ga moramo najprije upakirati da bi doznali shape print(image.squeeze().shape) #Primjetimo da squeeze izbaci jediničnu dimenziju #Iscrtavanje uzorka pomoću matplotlib biblioteke plt.imshow(image.squeeze(), cmap="gray") print("ova slika je klase: ", torch.tensor(label)) types: <class 'torch.tensor'> <class 'int'> shapes: torch.size([1, 28, 28]) torch.size([]) torch.size([28, 28]) Ova slika je klase: tensor(9) Pogledajmo također kako izgleda jedan batch podataka. Batch podataka se odnosi na veću skupinu slika koje ćemo kasnije htjeti zajedno obraditi. Preciznije, govori broj slika koje koristimo u svakoj iteraciji pri treniranju ili testiranju modela mreže. Ovdje ćemo prikazati samo batch od 10 slika, a kasnije ćemo koristiti batch od po 1000 slika. 27
28 In [7]: display_loader = torch.utils.data.dataloader( train_set, batch_size=10 ) batch = next(iter(display_loader)) # uzmimo prvi batch podataka od loadera images, labels = batch #Raspakirajmo batch na slike i labele print('types:', type(images), type(labels)) #Tipovi slika i labela print('shapes:', images.shape, labels.shape) #Oblici slika i labela print(images[0].shape) # oblik prve slike print(labels[0]) #Klasifikacija prve slike #Stvorimo grid koji možemo iscrtati uz pomoć torchvision.utils grid = torchvision.utils.make_grid(images, nrow=10) plt.figure(figsize=(15,15)) plt.imshow(np.transpose(grid, (1,2,0))) print('labels:', labels) #ispišimo i pripadajuće labele types: <class 'torch.tensor'> <class 'torch.tensor'> shapes: torch.size([10, 1, 28, 28]) torch.size([10]) torch.size([1, 28, 28]) tensor(9) labels: tensor([9, 0, 0, 3, 0, 2, 7, 2, 5, 5]) 2. korak - modeliranje neuronske mreže Nakon što smo vidjeli kako učitati potrebne podatke, krenimo na izgradnju neuronske mreže. Prvi korak u tome je izgradnja arhitekture, odnosno definiranje slojeva koji je sačinjavaju i definiranje propagacije unaprijed koju određuje metoda forward. Sve neuronske mreže moraju nasljediti razred torch.nn.module. Slojevi mreže također nasljeđuju taj razred. U ovom kodu koristimo dvije vrste slojeva - konvolucijski sloj modeliran razredom torch.nn.conv2d i linearni tj. potpuno povezani sloj modeliran razredom torch.nn.linear. Pri definiranju propagacije unaprijed, bitan je pojam funkcija aktivacije. Funckije aktivacije određuju kako pojedinačni neuroni reagiraju na dospjele "podražaje", odnosno govore koliko će se neuron aktivirati za dospjele signale iz prethodnog sloja. Kao funkcija aktivacije se najčešće koriste ReLU i sigmoida. 28
29 In [8]: class Network(nn.Module): def init (self): super(network, self). init () #Stvorimo dva konvolucijska sloja #konvolucijski slojevi su modelirani razredom torch.nn.conv2d self.conv1 = nn.conv2d(in_channels=1, out_channels=6, kernel_size=5) self.conv2 = nn.conv2d(in_channels=6, out_channels=12, kernel_size=5) #Stvorimo dva linearna sloja #fc kao "fully connected layer", a ima i drugi naziv - "linear layer" #linearni slojevi su modelirani razredom torch.nn.linear self.fc1 = nn.linear(in_features=12 * 4 * 4, out_features=120) self.fc2 = nn.linear(in_features=120, out_features=60) #Stvaranje izlaznog sloja - sloja gdje vidimo rezultate predikcije self.out = nn.linear(in_features=60, out_features=10) def forward(self, t): # (1) input layer t = t # (2) hidden conv layer t = self.conv1(t) t = F.relu(t) #funkcija aktivacije t = F.max_pool2d(t, kernel_size=2, stride=2) # (3) hidden conv layer t = self.conv2(t) t = F.relu(t) #funkcija aktivacije t = F.max_pool2d(t, kernel_size=2, stride=2) # (4) hidden linear layer t = t.reshape(-1, 12 * 4 * 4) t = self.fc1(t) t = F.relu(t) #funkcija aktivacije # (5) hidden linear layer t = self.fc2(t) t = F.relu(t) #funkcija aktivacije # (6) output layer t = self.out(t) #t = F.softmax(t, dim=1) return t 29
30 Neke parametre koje smo koristili pri definiranju arhitekture smo sami odabrali,a njih nazivamo hiperparametri. Hiperparametri su parametri čije se vrijednosti biraju ručno i proizvoljno. Programer neuronskih mreža bira te vrijednosti uglavnom na temelju pokušaja i pogreške, promatrajući koji paramteri će dati bolje rezultate i vodeći se vrijednostima koje su se pokazale uspješnima u prošlosti. Za izgradnju arhitekture definirane konvolucijske mreže smo sada odabrali sljedeće hiperparametre: kernel_size, out_channels i out_features. Već smo ranije odabrali i hiperparametar veličinu batcha. Vrijednosti hiperparametara jednostavno sami odabiremo te testiramo i podešavamo kako bismo pronašli vrijednosti koje najbolje funkcioniraju. Kratak opis spomenutih parametara: kernel_size - Postavlja veličinu filtra u korištenog u konvolucijskom sloju. Riječi kernel i filter su međusobno zamjenjive. kernel_size=5 odgovara filtru dimenzija 5x5 out_channels - Postavlja broj filtara. Jedan filtar proizvodi jedan izlazni kanal. out_features - Postavlja veličinu izlaznog tensora. Stvorimo instancu neuronske mreže te ju ispišimo. PyTorch osigurava da ispis modela neuronske mreže prikaže i opiše slojeve koji čine tu mrežu In [9]: network = Network() print(network) Network( (conv1): Conv2d(1, 6, kernel_size=(5, 5), stride=(1, 1)) (conv2): Conv2d(6, 12, kernel_size=(5, 5), stride=(1, 1)) (fc1): Linear(in_features=192, out_features=120, bias=true) (fc2): Linear(in_features=120, out_features=60, bias=true) (out): Linear(in_features=60, out_features=10, bias=true) ) 30
31 3. korak - definirati funkciju treniranja Treniranje se ugrubo odvija u ovim koracima: 1. Dohvati batch 2. Predaj dohvaćeni batch mreži 3. Izračunaj koliko je mreža pogriješila pomoću funkcije gubitka 4. Izračunaj gradijent funkcije gubitke s obzirom na parametre u slojevima mreža (težine) 5. Ažuriraj parametre mreže na temelju odgovarajućeg gradijenta i to tako da napraviš korak određene veličine u negativnom smjeru gradijenta 6. Ponavljaj korake 1-5 dok se ne dovrši jedna epoha, a epoha znači preći jednom preko svih podataka što su u datasetu za treniranje 7. Ponavljaj korake 1-6 dok se ne odradi zadani broj epoha Pri definiranju funkcije treniranja ključni su sljedeći hiperparametri: funckija gubitka (loss) - funkcija koja za predikcije mreže očitane na izlaznom sloju kaže koliko je mreža pogriješila, da bi se mreža na temelju toga i korištenjem diferencijacije popravila. Neke funkcije gubitka su MSE (Mean Square Error), MAE (Mean Absolute Error), MBE (Mean Bias Error) funkcija optimizacije (optimizer) - da bi mreža učila, koristi propagaciju unazad - dakle od izlaznog sloja krene prema ulaznom sloju. Pritom na svaki parametar svakog sloja primjeni funkciju optimizacije kojom napravi korak određene veličine u negativnom smjeru gradijenta. Najkorištenije funkcije optimizacije su Adam (Adaptive Moment Estimation), SGD (Stochastic gradient descent) i RMSProp (Root Mean Squared Propagation) learning rate - početna veličina koraka koju mreža napravi u negativnom smjeru derivacije funkcije gubitka za svaki parametar koji se nalazi u težinama slojeva mreže kada se mreža optimizira. Veličina koraka se tijekom učenja prilagođava, točnije smanjuje kako se bliži minimumu funckije gubitka. broj epoha - koliko puta ćemo preći preko svih podataka iz dataseta 31
32 In [10]: loss_f = nn.crossentropyloss() # funkcija gubitka optimizer_f = torch.optim.adam # funkcija optimizacije learning_rate = # početna veličina koraka epochs = 6 #broj epoha def train(): model = Network() optimizer = optimizer_f(model.parameters(), lr = learning_rate) criterion = loss_f for epoch in range(1, epochs): for batch_id, (image, label) in enumerate(train_loader): label, image = label, image output = model(image) loss = criterion(output, label) optimizer.zero_grad() loss.backward() optimizer.step() if batch_id % 10 == 0: # print tek da vidimo kako teče treniranje print('loss :{:.4f} Epoch[{}/{}]'.format(loss.item(),epoch,6)) return model 4. korak - treniranje mreže Pogledajmo najprije koje su predikcije neistrenirane mreže za prije izvađeni uzorak - sliku gležnjače koja ima label 9. Nakon što provučemo izlaz kroz softmax funckiju, dobit ćemo vjerojatnosti u postotcima. Primjetimo da su vjerojatnosti nasumično raspoređene jer su trenutni parametri mreže također nasumično uzeti pri inicijalizaciji mreže. Postotci s kreću oko 10% za sve klase, što je za očekivati jer je ukupno 10 klasa, a 1/10 = > 10% In [11]: pred = network(image.unsqueeze(0)) print(pred) print(f.softmax(pred, dim=1)) tensor([[ , , , , , , , , , ]], grad_fn=<addmmbackward>) tensor([[0.0976, , , , , , , , , ]], grad_fn=<softmaxbackward>) Trenirajmo mrežu tako što pridodjelimo istreniranu mrežu prije definiranom modelu: 32
33 In [12]: model = train() Loss : Epoch[1/6] Loss : Epoch[1/6] Loss : Epoch[1/6] Loss : Epoch[1/6] Loss : Epoch[1/6] Loss : Epoch[1/6] Loss : Epoch[2/6] Loss : Epoch[2/6] Loss : Epoch[2/6] Loss : Epoch[2/6] Loss : Epoch[2/6] Loss : Epoch[2/6] Loss : Epoch[3/6] Loss : Epoch[3/6] Loss : Epoch[3/6] Loss : Epoch[3/6] Loss : Epoch[3/6] Loss : Epoch[3/6] Loss : Epoch[4/6] Loss : Epoch[4/6] Loss : Epoch[4/6] Loss : Epoch[4/6] Loss : Epoch[4/6] Loss : Epoch[4/6] Loss : Epoch[5/6] Loss : Epoch[5/6] Loss : Epoch[5/6] Loss : Epoch[5/6] Loss : Epoch[5/6] Loss : Epoch[5/6] Provjerimo koje predikcije istrenirane mreže na istu onu sliku gležnjače od prije. Primjetimo da je vjerojatnost koju sada predviđa mreža za gležnjaču značajno veća i točnija za label 9 koji odgovara klasi gležnjače te iznosi % In [13]: pred = model(image.unsqueeze(0)) print(pred) print(f.softmax(pred, dim=1)) tensor([[ , , , , , , , , , ]], grad_fn=<addmmbackward>) tensor([[2.0291e-07, e-12, e-11, e-11, e-11, e- 03, e-09, e-03, e-05, e-01]], grad_fn=<softmaxbackward>) 33
34 5. korak - testiranje istrenirane mreže Najprije dohvatimo dataset za testiranje, a potom definiramo funkciju koja će odraditi testiranje: In [14]: test_set = torchvision.datasets.fashionmnist( root='./data',train=false,download=true,transform=transforms.compose([ transforms.totensor() ]) ) test_loader = torch.utils.data.dataloader(train_set,batch_size=1000,shuffle=true ) In [15]: def test(model): with torch.no_grad(): correct = 0 total = 0 for image, label in test_loader: image = image#.to(device) label = label#.to(device) outputs = model(image) predicted = torch.argmax(outputs,dim=1) total += label.size(0) correct += (predicted == label).sum().item() msg='test Accuracy of the model on the test images: {} %' print(msg.format(100 * correct / total)) Testirajmo mrežu: In [16]: print("testiranje krenulo...") test(model) Testiranje krenulo... Test Accuracy of the model on the test images: % 34
35 4. Zaključak Za jednostavnije korištenje algoritama dubokog učenja stvorene su brojne Python biblioteke koje korisniku nude visoku efikasnost i vrlo jednostavnu primjenu algoritama. Te biblioteke pružaju funkcionalnost vektorske obrade podataka, učitavanja i obrade slika, automatsku diferencijaciju, podršku za GPU i iscrtavanje rezultata. Za GPU podršku je prije svega zaslužan CUDA API koji je razvila Nvidia i kojim je omogućila jednostavno korištenje jezgara grafičke procesorske jedinice za provođenje proračuna opće namjene kao što je paraleliziranje zadataka u dubokom učenju. Od samog projektiranja i izgradnje arhitekture umjetne neuronske mreže, mnogo je teže pronaći i prikupiti odgovarajući skup podataka na kojem bi se modelirana mreža trenirala. Na internetu su dostupni skupovi podataka poput MNIST-a i FashionMNIST-a koje programeri često koriste pri vježbanju dubokog učenja, a znanstvenici kao benchmark osmišljenih arhitektura neuronskih mreža. 35
36 5. Sažetak U ovom seminarskom radu opisane su najpoznatije biblioteke za ostvarivanje dubokog učenja korištene u programskom jeziku Python. U Pythonu je programska podrška za duboko učenje osobito dobro razvijena. Stvorene su biblioteke koje osiguravaju visoke performanse izvođenja operacija vektorske obrade podataka, učitavanja i obrade slika, automatske diferencijacije i jednostavnog iscrtavanja rezultata te biblioteke koje pružaju GPU podršku. Među najkorištenijim i najpopularnijim bibliotekama za spomenute stvari su: NumPy za vektorsku obradu podataka libjpeg-turbo i pillow-simd za učitavanje i obradu slika PyTorch za automatsku diferencijaciju cudnn za GPU podršku matplotlib za iscrtavanje rezultata Preciznije je reći da je PyTorch programski okvir (framework) za duboko učenje koji sadrži sve potrebno za jednostavnu implementaciju algoritama dubokog učenja uz akceleraciju računanja korištenjem grafičke procesorske jedinice. Pored programskog koda važni su skupovi podataka s kojima neuronska mreža radi. Jednostavni program od 200 linija koda koji je opisan u seminaru koristi FashionMNIST skup podataka da bi trenirao jednostavnu konvolucijsku neuronsku mrežu. 36
37 6. Literatura
Klasifikacija slika kucnih brojeva dubokim konvolucijskim modelima
Klasifikacija slika kućnih brojeva dubokim konvolucijskim modelima Ivan Šego 4. srpnja 2018. Sadržaj 1 Uvod 2 Konvolucijske neuronske mreže Konvolucijski sloj Sloj sažimanja Potpuno povezani sloj 3 Ispitni
ВишеPostojanost boja
Korištenje distribucije osvjetljenja za ostvaranje brzih i točnih metode za postojanost boja Nikola Banić 26. rujna 2014. Sadržaj Postojanost boja Ubrzavanje lokalnog podešavanja boja Distribucija najčešćih
ВишеSlide 1
OSNOVNI POJMOVI Naredba je uputa računalu za obavljanje određene radnje. Program je niz naredbi razumljivih računalu koje rješavaju neki problem. Pisanje programa zovemo programiranje. Programski jezik
Више8 2 upiti_izvjesca.indd
1 2. Baze podataka Upiti i izvješća baze podataka Na početku cjeline o bazama podataka napravili ste plošnu bazu podataka o natjecanjima učenika. Sada ćete izraditi relacijsku bazu u Accessu o učenicima
ВишеAlgoritmi SŠ P1
Županijsko natjecanje iz informatike Srednja škola 9. veljače 2018. RJEŠENJA ZADATAKA Napomena: kodovi za većinu opisanih algoritama dani su u Pythonu radi jednostavnosti i lakše čitljivosti. Zbog prirode
ВишеSlide 1
0(a) 0(b) 0(c) 0(d) 0(e) :: :: Neke fizikalne veličine poput indeksa loma u anizotropnim sredstvima ovise o iznosu i smjeru, a nisu vektori. Stoga se namede potreba poopdavanja. Međutim, fizikalne veličine,
ВишеPuTTY CERT.hr-PUBDOC
PuTTY CERT.hr-PUBDOC-2018-12-371 Sadržaj 1 UVOD... 3 2 INSTALACIJA ALATA PUTTY... 4 3 KORIŠTENJE ALATA PUTTY... 7 3.1 POVEZIVANJE S UDALJENIM RAČUNALOM... 7 3.2 POHRANA PROFILA KORISNIČKIH SJEDNICA...
ВишеRano učenje programiranj
PREGLED ALATA ZA RANO UČENJE PROGRAMIRANJA Ivana Ružić, I. osnovna škola Čakovec Programiranje - nova pismenost Živimo u svijetu u kojem tehnologija brzo napreduje. Način na koji radimo, komuniciramo,
ВишеMatrice. Algebarske operacije s matricama. - Predavanje I
Matrice.. Predavanje I Ines Radošević inesr@math.uniri.hr Odjel za matematiku Sveučilišta u Rijeci Matrice... Matrice... Podsjeti se... skup, element skupa,..., matematička logika skupovi brojeva N,...,
ВишеSVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA Seminarski rad u okviru predmeta Računalna forenzika BETTER PORTABLE GRAPHICS FORMAT Matej
SVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA Seminarski rad u okviru predmeta Računalna forenzika BETTER PORTABLE GRAPHICS FORMAT Matej Crnac Zagreb, siječanj 2018 Sadržaj Uvod 2 BPG format
ВишеRecuva CERT.hr-PUBDOC
Recuva CERT.hr-PUBDOC-2019-5-379 Sadržaj 1 UVOD... 3 2 INSTALACIJA ALATA RECUVA... 4 3 KORIŠTENJE ALATA RECUVA... 7 4 ZAKLJUČAK... 13 Ovaj dokument izradio je Laboratorij za sustave i signale Zavoda za
ВишеMicrosoft Word - IP_Tables_programski_alat.doc
1. IP Tables alat (pregled naredbi) 1.1. Osnovne IP Tables naredbe za filtriranje paketa U ovom poglavlju opisane su osnovne IP Tables naredbe korištene za filtriranje paketa. S programskim paketom IP
ВишеALIP1_udzb_2019.indb
Razmislimo Kako u memoriji računala prikazujemo tekst, brojeve, slike? Gdje se spremaju svi ti podatci? Kako uopće izgleda memorija računala i koji ju elektronički sklopovi čine? Kako biste znali odgovoriti
ВишеHej hej bojiš se matematike? Ma nema potrebe! Dobra priprema je pola obavljenog posla, a da bi bio izvrsno pripremljen tu uskačemo mi iz Štreberaja. D
Hej hej bojiš se matematike? Ma nema potrebe! Dobra priprema je pola obavljenog posla, a da bi bio izvrsno pripremljen tu uskačemo mi iz Štreberaja. Donosimo ti primjere ispita iz matematike, s rješenjima.
ВишеSlide 1
Kako jednostavnije preći na višu verziju Formsa Ivan Lovrić, Vedran Latin 14.10.2009. Sadržaj prezentacije Predmet migracije Razlozi za migraciju Infrastruktura potrebna za migraciju Pilot migracija Migracija
ВишеSveučilište u Zagrebu Fakultet prometnih znanosti Zavod za inteligentne transportne sustave Katedra za primijenjeno računarstvo Vježba: #7 Kolegij: Ba
Sveučilište u Zagrebu Fakultet prometnih znanosti Zavod za inteligentne transportne sustave Katedra za primijenjeno računarstvo Vježba: #7 Kolegij: Baze podataka Tema: Osnovna SELECT naredba Vježbu pripremili:
Више3 DNEVNI SEMINAR INTERNET POSLOVANJE TEME: 1. INTERNET POSLOVANJE 2. INTERNET MARKETING, INTERNET PR I ANALITIKA 3. UPRAVLJANJE SADRŽAJEM, DOMENE, HOS
3 DNEVNI SEMINAR INTERNET POSLOVANJE TEME: 1. INTERNET POSLOVANJE 2. INTERNET MARKETING, INTERNET PR I ANALITIKA 3. UPRAVLJANJE SADRŽAJEM, DOMENE, HOSTING, SECURITY I. DAN UVOD U INTERNET POSLOVANJE 15:00
ВишеPowerPoint Presentation
. ICT sustavi za energetski održivi razvoj grada Energetski informacijski sustav Grada Zagreba Optimizacija energetske potrošnje kroz uslugu točne procjene solarnog potencijala. Energetski informacijski
ВишеXIII. Hrvatski simpozij o nastavi fizike Istraživački usmjerena nastava fizike na Bungee jumping primjeru temeljena na analizi video snimke Berti Erja
Istraživački usmjerena nastava fizike na Bungee jumping primjeru temeljena na analizi video snimke Berti Erjavec Institut za fiziku, Zagreb Sažetak. Istraživački usmjerena nastava fizike ima veću učinkovitost
ВишеРачунарска интелигенција
Рачунарска интелигенција Генетско програмирање Александар Картељ kartelj@matf.bg.ac.rs Ови слајдови представљају прилагођење слајдова: A.E. Eiben, J.E. Smith, Introduction to Evolutionary computing: Genetic
ВишеMicrosoft Word - 6. RAZRED INFORMATIKA.doc
Kriteriji ocjenjivanja i vrednovanja INFORMATIKA - 6. razred Nastavne cjeline: 1. Život na mreži 2. Pletemo mreže, prenosimo, štitimo, pohranjujemo i organiziramo podatke 3. Računalno razmišljanje i programiranje
ВишеI година Назив предмета I термин Вријеме II термин Вријеме Сала Математика : :00 све Основи електротехнике
I година Математика 1 2225 20.06.2019. 9:00 04.07.2019. 9:00 све Основи електротехнике 1 2226 17.06.2019. 9:00 01.07.2019. 13:00 све Програмирање 1 2227 21.06.2019. 9:00 05.07.2019. 9:00 све Основи рачунарске
ВишеI година Назив предмета I термин Вријеме II термин Вријеме Сала Математика : :00 све Основи електротехнике
I година Математика 1 2225 05.09.2019. 9:00 19.09.2019. 9:00 све Основи електротехнике 1 2226 02.09.2019. 9:00 16.09.2019. 9:00 све Програмирање 1 2227 06.09.2019. 9:00 20.09.2019. 9:00 све Основи рачунарске
ВишеI година Назив предмета I термин Вријеме II термин Вријеме Сала Математика : :00 све Основи електротехнике
I година Математика 1 2225 07.02.2019. 9:00 21.02.2019. 9:00 све Основи електротехнике 1 2226 04.02.2019. 9:00 18.02.2019. 9:00 све Програмирање 1 2227 08.02.2019. 9:00 22.02.2019. 9:00 све Основи рачунарске
ВишеPROGRAMIRANJE Program je niz naredbi razumljivih računalu koje rješavaju neki problem. Algoritam je postupak raščlanjivanja problema na jednostavnije
PROGRAMIRANJE Program je niz naredbi razumljivih računalu koje rješavaju neki problem. Algoritam je postupak raščlanjivanja problema na jednostavnije korake. Uz dobro razrađen algoritam neku radnju ćemo
ВишеI година Назив предмета I термин Вријеме Сала Математика :00 све Основи електротехнике :00 све Програмирање
I година Математика 1 2225 03.10.2019. 15:00 све Основи електротехнике 1 2226 30.09.2019. 15:00 све Програмирање 1 2227 04.10.2019. 15:00 све Основи рачунарске технике 2228 01.10.2019. 15:00 све Социологија
ВишеP2.1 Projektovanje paralelnih algoritama 1
Projektovanje paralelnih algoritama I Uvod Osnove dinamičke paralelizacije 1 Primer: Fibonačijev niz Primer rekurz. računanja Fibonačijevih brojeva: F 0 = 0; F 1 = 1; F i = F i -1 + F i -2 za i 2 Algoritam
ВишеTest ispravio: (1) (2) Ukupan broj bodova: 21. veljače od 13:00 do 14:00 Županijsko natjecanje / Osnove informatike Osnovne škole Ime i prezime
Test ispravio: () () Ukupan broj bodova:. veljače 04. od 3:00 do 4:00 Ime i prezime Razred Škola Županija Mentor Sadržaj Upute za natjecatelje... Zadaci... Upute za natjecatelje Vrijeme pisanja: 60 minuta
ВишеMože li učenje tablice množenja biti zabavno?
Mogu li besplatne igre na tabletima potaknuti učenike na učenje tablice množenja i dijeljenja? Sanja Loparić, prof. matematike i informatike Tehnička škola Čakovec Rovinj, 11.11.2016. Kad djeca nisu u
ВишеKORISNIČKE UPUTE APLIKACIJA ZA POTPIS DATOTEKA
KORISNIČKE UPUTE APLIKACIJA ZA POTPIS DATOTEKA SADRŽAJ 1. UVOD... 3 1.1. Cilj i svrha... 3 1.2. Područje primjene... 3 2. POJMOVI I SKRAĆENICE... 4 3. PREDUVJETI KORIŠTENJA... 5 4. PREGLED APLIKACIJE...
ВишеОрт колоквијум
II колоквијум из Основа рачунарске технике I - 27/28 (.6.28.) Р е ш е њ е Задатак На улазе x, x 2, x 3, x 4 комбинационе мреже, са излазом z, долази четворобитни BCD број. Ако број са улаза при дељењу
ВишеP11.3 Analiza zivotnog veka, Graf smetnji
Поједностављени поглед на задњи део компајлера Међурепрезентација (Међујезик IR) Избор инструкција Додела ресурса Распоређивање инструкција Инструкције циљне архитектуре 1 Поједностављени поглед на задњи
ВишеDUBINSKA ANALIZA PODATAKA
DUBINSKA ANALIZA PODATAKA () ASOCIJACIJSKA PRAVILA (ENGL. ASSOCIATION RULE) Studeni 2018. Mario Somek SADRŽAJ Asocijacijska pravila? Oblici učenja pravila Podaci za analizu Algoritam Primjer Izvođenje
ВишеMicrosoft PowerPoint - Topic02 - Serbian.ppt
Tema 2 Kriterijumi kvaliteta za softverske proizvode DAAD Project Joint Course on Software Engineering Humboldt University Berlin, University of Novi Sad, University of Plovdiv, University of Skopje, University
ВишеSVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA ZAVRŠNI RAD br Autonomno kretanje virtualnih objekata Marin Hrkec Zagreb, lipanj 201
SVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA ZAVRŠNI RAD br. 6404 Autonomno kretanje virtualnih objekata Marin Hrkec Zagreb, lipanj 2019. iii SADRŽAJ 1. Uvod 1 2. Korišteni alati i tehnologije
ВишеUvod u računarstvo 2+2
Programiranje 2 doc.dr.sc. Goranka Nogo PMF Matematički odsjek, Zagreb Kontakt ured: 228, drugi kat e-mail: nogo@math.hr konzultacije: četvrtak, 12:00-14:00 petak, 11:00-12:00 neki drugi termin, uz prethodni
ВишеPrikaz slike na monitoru i pisaču
CRT monitori s katodnom cijevi i LCD monitori na bazi tekućih kristala koji su gotovo istisnuli iz upotrebe prethodno navedene. LED monitori- Light Emitting Diode, zasniva se na elektrodama i diodama koje
ВишеSveučilište u Zagrebu
SVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA RAČUNALNA FORENZIKA SEMINAR VoIP enkripcija Ivan Laznibat Zagreb, siječanj, 2017. Sadržaj 1. Uvod... 1 2. VoIP enkripcija... 3 2.1 PKI (eng.
ВишеMicrosoft PowerPoint - Topic02 - Serbian.ppt
Tema 2 Kriterijumi kvaliteta za softverske proizvode DAAD Project Joint Course on Software Engineering Humboldt University Berlin, University of Novi Sad, University of Plovdiv, University of Skopje, University
ВишеOpenVPN GUI CERT.hr-PUBDOC
OpenVPN GUI CERT.hr-PUBDOC-2019-7-384 Sadržaj 1 UVOD... 3 2 INSTALACIJA ALATA OPENVPN GUI... 5 3 KORIŠTENJE ALATA OPENVPN GUI... 17 4 ZAKLJUČAK... 27 Ovaj dokument izradio je Laboratorij za sustave i signale
ВишеПА-4 Машинско учење-алгоритми машинског учења
ПА-4 Машинско учење-алгоритми машинског учења Машинско учење увод и основни појмови Деф: the desgn and development of algorthms that allow computers to mprove ther performance over tme based on data sensor
ВишеProgramiranje 2 popravni kolokvij, 15. lipnja Ime i prezime: JMBAG: Upute: Na kolokviju je dozvoljeno koristiti samo pribor za pisanje i brisanj
Upute: Na kolokviju je dozvoljeno koristiti samo pribor za pisanje i brisanje, te službeni šalabahter. Kalkulatori, mobiteli, razne neslužbene tablice, papiri i sl., nisu dozvoljeni! Sva rješenja napišite
ВишеPowerPoint Presentation
i n f o r m a c i j s k i i n ž e n j e r i n g Usporedba Microsoft Analysis Services i Hyperion Essbase OLAP Marko Hilak Krešimir Futivić Maja Inđić 15.10.2009 Microsoft Analysis Services i Hyperion Essbase
ВишеNastavna cjelina: 1. Jezik računala Kataloška tema: 1.1. Bit 1.2. Brojevi zapisani četvorkom bitova Nastavna jedinica: 1.1. Bit 1.2. Brojevi zapisan
Nastavna cjelina: 1. Osnove IKT-a Kataloška tema: 1.6. Paralelni i slijedni ulazno-izlazni pristupi računala 1.7. Svojstva računala Unutar računala podatci su prikazani električnim digitalnim signalima
ВишеRAČUNALO
RAČUNALO HARDVER + SOFTVER RAČUNALO HARDVER strojna oprema računala tj. tvrdi, materijalni, opipljivi dijelovi računala kućište i sve komponente u njemu, vanjske jedinice SOFTVER neopipljivi dijelovi računala
ВишеWAMSTER Prezentacija
WAMSTER Mi smo Studio Elektronike Rijeka d.o.o. tvrtka za razvoj tehnoloških rješenja u automatici i elektronici tvrka osnovana 2006. na temelju komercijalizacije rezultata magistarskog rada locirani u
ВишеUvod u statistiku
Uvod u statistiku Osnovni pojmovi Statistika nauka o podacima Uključuje prikupljanje, klasifikaciju, prikaz, obradu i interpretaciju podataka Staistička jedinica objekat kome se mjeri neko svojstvo. Svi
ВишеLogičke izjave i logičke funkcije
Logičke izjave i logičke funkcije Građa računala, prijenos podataka u računalu Što su logičke izjave? Logička izjava je tvrdnja koja može biti istinita (True) ili lažna (False). Ako je u logičkoj izjavi
ВишеMicrosoft Word - 15ms261
Zadatak 6 (Mirko, elektrotehnička škola) Rješenje 6 Odredite sup S, inf S, ma S i min S u skupu R ako je S = { R } a b = a a b + b a b, c < 0 a c b c. ( ), : 5. Skratiti razlomak znači brojnik i nazivnik
ВишеJMBAG IME I PREZIME BROJ BODOVA MJERA I INTEGRAL završni ispit 6. srpnja (Knjige, bilježnice, dodatni papiri i kalkulatori nisu dozvoljeni!) 1.
MJERA I INTEGRAL završni ispit 6. srpnja 208. (Knjige bilježnice dodatni papiri i kalkulatori nisu dozvoljeni!). (8 bodova) Kao na predavanjima za d N sa P d : a b ] a d b d ] : a i b i R a i b i za i
ВишеSatnica.xlsx
САТНИЦА ПОЛАГАЊА ИСПИТА У ИСПИТНОМ РОКУ СЕПТЕМБАР 2018/2019 ПОНЕДЕЉАК 19.08.2019 Објектно оријентисано програмирање 41 2Б-ТЕЛ Методе преноса у телекомуникационим системима 1 2Б-ТЕЛ Моделовање и симулација
ВишеGLAZBENA UČILICA Marko Beus Filozofski fakultet u Zagrebu 098/ Sažetak Glazbena učilica je projekt osmišljen kao nadopuna
GLAZBENA UČILICA Marko Beus Filozofski fakultet u Zagrebu beusmarko@gmail.com 098/938-8295 Sažetak Glazbena učilica je projekt osmišljen kao nadopuna nastavnom programu solfeggia u osnovnim glazbenim školama.
ВишеPowerPoint Presentation
VMware Horizon 7 What s New Bojan Andrejić i Stefan Đoković COMING Computer Engineering Uvod u VMware Horizon 7 Obezbeđuje unapređeno i bezbedno upravljanje i isporučivanje Windows ili Linux desktopova,
ВишеSVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA ZAVRŠNI RAD br Klasifikacija slika kućnih brojeva dubokim konvolucijskim modelima Iv
SVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA ZAVRŠNI RAD br. 5702 Klasifikacija slika kućnih brojeva dubokim konvolucijskim modelima Ivan Šego Zagreb, srpanj 2018. Umjesto ove stranice umetnite
Више7. predavanje Vladimir Dananić 14. studenoga Vladimir Dananić () 7. predavanje 14. studenoga / 16
7. predavanje Vladimir Dananić 14. studenoga 2011. Vladimir Dananić () 7. predavanje 14. studenoga 2011. 1 / 16 Sadržaj 1 Operator kutne količine gibanja 2 3 Zadatci Vladimir Dananić () 7. predavanje 14.
Више5S prezentacija - za printati bez videa i igre (3)
Lean 5S Anja Štefanić, mag.oec. copyright Što je 5S? Alat Lean menadžmenta Alat koji se čini jednostavan, no mnoga poduzeća ignoriraju baš te osnovne principe Baza uspješne implementacije Fokusira se
Више_sheets.dvi
Zavod za elektroniku, mikroelektroniku, 28. studenog 2008. računalne i inteligentne sustave 2. me duispit iz Arhitekture računala 2, teorijski dio 1. Koja komponenta modernih računala nije bila prisutnau
ВишеSVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA DIPLOMSKI RAD br Učenje dubokih korespondencijskih metrika trojnim gubitkom Marin Ko
SVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA DIPLOMSKI RAD br. 1729 Učenje dubokih korespondencijskih metrika trojnim gubitkom Marin Kostelac Zagreb, srpanj 2018. Umjesto ove stranice umetnite
ВишеРАСПОРЕД ИСПИТА У ИСПИТНОМ РОКУ ЈАНУАР 1 ШКОЛСКЕ 2016/2017. ГОДИНЕ (последња измена ) Прва година: ПРВА ГОДИНА - сви сем информатике Име пр
РАСПОРЕД ИСПИТА У ИСПИТНОМ РОКУ ЈАНУАР 1 ШКОЛСКЕ 2016/2017. ГОДИНЕ (последња измена 23.01.2017.) Прва година: ПРВА ГОДИНА - сви сем информатике Име предмета Датум и термин одржавања писменог дела испита
ВишеОрт колоквијум
Испит из Основа рачунарске технике - / (6.6.. Р е ш е њ е Задатак Комбинациона мрежа има пет улаза, по два за број освојених сетова тенисера и један сигнал који одлучује ко је бољи уколико је резултат
ВишеNIAS Projekt e-građani KORISNIČKA UPUTA za aplikaciju NIAS Verzija 1.1 Zagreb, srpanj 2014.
Projekt e-građani KORISNIČKA UPUTA za aplikaciju Verzija 1.1 Zagreb, srpanj 2014. Naslov: Opis: Korisnička uputa za aplikaciju Dokument sadrži upute korisnicima aplikacije u sustavu e-građani Ključne riječi:
ВишеE-RAČUN ZA POSLOVNE SUBJEKTE ZAPRIMANJE I SLANJE E-RAČUNA JE LAKO, PROVJERITE U FINI KAKO...
ZA POSLOVNE SUBJEKTE ZAPRIMANJE I SLANJE A JE LAKO, PROVJERITE U FINI KAKO... 2 ZA POSLOVNE SUBJEKTE Servis e-račun je internetski servis za elektroničku razmjenu računa između poslovnih subjekata (dobavljača
ВишеSVEUČILIŠTE JOSIPA JURJA STROSSMAYERA U OSIJEKU FAKULTET ELEKTROTEHNIKE, RAČUNARSTVA I INFORMACIJSKIH TEHNOLOGIJA Sveučilišni preddiplomski studij PRI
SVEUČILIŠTE JOSIPA JURJA STROSSMAYERA U OSIJEKU FAKULTET ELEKTROTEHNIKE, RAČUNARSTVA I INFORMACIJSKIH TEHNOLOGIJA Sveučilišni preddiplomski studij PRIMJENA STROJNOG UČENJA U KLASIFICIRANJU LEGO KOCAKA
ВишеMicrosoft Word - Master 2013
ИСПИТНИ РОК: ЈУН 2018/2019 МАСТЕР АКАДЕМСКЕ СТУДИЈЕ (АКРЕДИТАЦИЈА 2013) Студијски програм: ЕЛЕКТРОЕНЕРГЕТИКА Семестар 17.06.2019 Статички електрицитет у технолошким процесима Електронска кола за управљање
ВишеMicrosoft Word - Master 2013
ИСПИТНИ РОК: СЕПТЕМБАР 2018/2019 МАСТЕР АКАДЕМСКЕ СТУДИЈЕ (АКРЕДИТАЦИЈА 2013) Студијски програм: ЕЛЕКТРОЕНЕРГЕТИКА Семестар 19.08.2019 Електромагнетна компатибилност у електроенергетици Управљање дистрибутивном
ВишеMAZALICA DUŠKA.pdf
SVEUČILIŠTE JOSIPA JURJA STROSSMAYERA U OSIJEKU ELEKTROTEHNIČKI FAKULTET Sveučilišni studij OPTIMIRANJE INTEGRACIJE MALIH ELEKTRANA U DISTRIBUCIJSKU MREŽU Diplomski rad Duška Mazalica Osijek, 2014. SADRŽAJ
ВишеMicrosoft PowerPoint - 03-Slozenost [Compatibility Mode]
Сложеност алгоритама (Програмирање 2, глава 3, глава 4-4.3) Проблем: класа задатака истог типа Велики број различитих (коректних) алгоритама Величина (димензија) проблема нпр. количина података које треба
Више(Microsoft Word - Rje\232enja zadataka)
1. D. Svedimo sve razlomke na jedinstveni zajednički nazivnik. Lako provjeravamo da vrijede rastavi: 85 = 17 5, 187 = 17 11, 170 = 17 10, pa je zajednički nazivnik svih razlomaka jednak Tako sada imamo:
ВишеVELEUČILIŠTE VELIKA GORICA REZULTATI STUDENTSKE ANKETE PROVEDENE NA VELEUČILIŠTU VELIKA GORICA ZA ZIMSKI SEMESTAR AKADEMSKE 2013/2014 GODINE 1. Uvod E
REZULTATI STUDENTSKE ANKETE PROVEDENE NA VELEUČILIŠTU VELIKA GORICA ZA ZIMSKI SEMESTAR AKADEMSKE 2013/2014 GODINE 1. Uvod Evaluacijska anketa nastavnika i nastavnih predmeta provedena je putem interneta.
ВишеMicrosoft PowerPoint - Programski_Jezik_C_Organizacija_Izvornog_Programa_I_Greske [Compatibility Mode]
Programski jezik C organizacija izvornog programa Prevođenje Pisanje programa izvorni program Prevođenje programa izvršni program Izvršavanje programa rezultat Faze prevođenja Pretprocesiranje Kompilacija
ВишеMatematika 1 - izborna
3.3. NELINEARNE DIOFANTSKE JEDNADŽBE Navest ćemo sada neke metode rješavanja diofantskih jednadžbi koje su drugog i viših stupnjeva. Sve su te metode zapravo posebni oblici jedne opće metode, koja se naziva
Више06 Poverljivost simetricnih algoritama1
ЗАШТИТА ПОДАТАКА Симетрични алгоритми заштите поверљивост симетричних алгоритама Преглед биће објашњено: коришћење симетричних алгоритама заштите како би се заштитила поверљивост потреба за добрим системом
Вишеkriteriji ocjenjivanja - informatika 8
8. razred Nastavne cjeline: 1. Osnove informatike 2. Pohranjivanje multimedijalnih sadržaja, obrada zvuka 3. Baze podataka - MS Access 4. Izrada prezentacije 5. Timska izrada web stranice 6. Kritički odnos
Више23. siječnja od 13:00 do 14:00 Školsko natjecanje / Osnove informatike Srednje škole RJEŠENJA ZADATAKA S OBJAŠNJENJIMA Sponzori Medijski pokrovi
3. siječnja 0. od 3:00 do 4:00 RJEŠENJA ZADATAKA S OBJAŠNJENJIMA Sponzori Medijski pokrovitelji Sadržaj Zadaci. 4.... Zadaci 5. 0.... 3 od 8 Zadaci. 4. U sljedećim pitanjima na pitanja odgovaraš upisivanjem
ВишеNewtonova metoda za rješavanje nelinearne jednadžbe f(x)=0
za rješavanje nelinearne jednadžbe f (x) = 0 Ime Prezime 1, Ime Prezime 2 Odjel za matematiku Sveučilište u Osijeku Seminarski rad iz Matematičkog praktikuma Ime Prezime 1, Ime Prezime 2 za rješavanje
Више1 NOVO U MNG CENTRU!!! OVLADAJTE TEHNOLOGIJOM IZRADE JAVA EE APLIKACIJA KORIŠ C ENJEM ORACLE ADF-A O - Otkrijte brzinu razvoja aplikacija sa ADF-om -
1 NOVO U MNG CENTRU!!! OVLADAJTE TEHNOLOGIJOM IZRADE JAVA EE APLIKACIJA KORIŠ C ENJEM ORACLE ADF-A O - Otkrijte brzinu razvoja aplikacija sa ADF-om - Minimizujte pisanje programskog koda - Smanjite obim
ВишеInženjering informacionih sistema
Fakultet tehničkih nauka, Novi Sad Inženjering informacionih sistema Dr Ivan Luković Dr Slavica Kordić Nikola Obrenović Milanka Bjelica Dr Jelena Borocki Dr Milan Delić UML UML (Unified Modeling Language)
ВишеSveučilište J.J. Strossmayera Fizika 2 FERIT Predložak za laboratorijske vježbe Lom i refleksija svjetlosti Cilj vježbe Primjena zakona geometrijske o
Lom i refleksija svjetlosti Cilj vježbe Primjena zakona geometrijske optike (lom i refleksija svjetlosti). Određivanje žarišne daljine tanke leće Besselovom metodom. Teorijski dio Zrcala i leće su objekti
ВишеIskustva suradnje s tvrtkom iz perspektive istraživačke institucije
Iskustva suradnje s tvrtkom iz perspektive istraživačke institucije Zoran Kalafatić, FER Zagreb Financiranje projekta sufinanciranje HAMAG-BICRO kroz program IRCRO poticanje mikro, malih i srednjih poduzeća
ВишеStručno usavršavanje
TOPLINSKI MOSTOVI IZRAČUN PO HRN EN ISO 14683 U organizaciji: TEHNIČKI PROPIS O RACIONALNOJ UPORABI ENERGIJE I TOPLINSKOJ ZAŠTITI U ZGRADAMA (NN 128/15, 70/18, 73/18, 86/18) dalje skraćeno TP Čl. 4. 39.
Вишеeredar Sustav upravljanja prijavama odjelu komunalnog gospodarstva 1 UPUTE ZA KORIŠTENJE SUSTAVA 1. O eredar sustavu eredar je sustav upravljanja prij
eredar Sustav upravljanja prijavama odjelu komunalnog gospodarstva 1 UPUTE ZA KORIŠTENJE SUSTAVA 1. O eredar sustavu eredar je sustav upravljanja prijavama koje građani mogu slati Upravnom odjelu za komunalno
ВишеDržavno natjecanje / Osnove informatike Srednje škole Zadaci U sljedećim pitanjima na odgovore odgovaraš upisivanjem slova koji se nalazi ispred
Zadaci. 8. U sljedećim pitanjima na odgovore odgovaraš upisivanjem slova koji se nalazi ispred točnog odgovora, u za to predviđen prostor. Odgovor Ako želimo stvoriti i pohraniti sliku, ali tako da promjenom
ВишеMarijan Marenčić dipl. ing. elektrotehnike Glavni arhitekt poslovanja i konzultant Nezavisni stručnjak sa više od 30 godina iskustva i u informatizaci
Marijan Marenčić dipl. ing. elektrotehnike Glavni arhitekt poslovanja i konzultant Nezavisni stručnjak sa više od 30 godina iskustva i u informatizaciji poslovanja. Ekspert za modeliranje, poslovne domene
ВишеRačunarski praktikum I - Vježbe 11 - Funktori
Prirodoslovno-matematički fakultet Matematički odsjek Sveučilište u Zagrebu RAČUNARSKI PRAKTIKUM I Vježbe 11 - Funktori v2018/2019. Sastavio: Zvonimir Bujanović Funkcijski objekti (funktori) Objekt klase
ВишеOptimizacija
Optimizacija 1 / 43 2 / 43 Uvod u optimizaciju Zadana funkcija Uvod u optimizaciju f : R n R Cilj: Naći x, točku minimuma funkcije f : - Problem je jednostavno opisati x = arg min x R n f (x). - Rješavanje
ВишеMicrosoft Word - III godina - EA - Metodi vjestacke inteligencije
Школска година 2018/2019. Предмет Методи вјештачке интелигенције Шифра предмета 2284 Студијски програм Електроенергетика и аутоматика Циклус студија Година студија Семестар Број студената Број група за
ВишеMicrosoft Word - Smerovi 1996
ИСПИТНИ РОК: СЕПТЕМБАР 2018/2019 СТАРИ НАСТАВНИ ПЛАН И ПРОГРАМ (1996) Смер: СВИ Филозофија и социологија 20.08.2019 Теорија друштвеног развоја 20.08.2019 Програмирање 20.08.2019 Математика I 21.08.2019
ВишеMicrosoft Word - predavanje8
DERIVACIJA KOMPOZICIJE FUNKCIJA Ponekad je potrebno derivirati funkcije koje nisu jednostavne (složene su). Na primjer, funkcija sin2 je kompozicija funkcija sin (vanjska funkcija) i 2 (unutarnja funkcija).
ВишеInstalacija R-project softvera Univerzitet u Novom Sadu April 2018 Contents 1 Uvod 2 2 Instalacija R: Instalacija
Instalacija R-project softvera Univerzitet u Novom Sadu April 2018 Contents 1 Uvod 2 2 Instalacija 2 2.1 R: Instalacija............................. 2 2.1.1 Instalacija za Windows................... 3
ВишеNumeričke metode u fizici 1, Projektni zadataci 2018./ Za sustav običnih diferencijalnih jednadžbi, koje opisuju kretanje populacije dviju vrs
Numeričke metode u fizici, Projektni zadataci 8./9.. Za sustav običnih diferencijalnih jednadžbi, koje opisuju kretanje populacije dviju vrsta životinja koje se nadmeću za istu hranu, dx ( dt = x x ) xy
ВишеPLAN I PROGRAM ZA DOPUNSKU (PRODUŽNU) NASTAVU IZ MATEMATIKE (za 1. razred)
PLAN I PROGRAM ZA DOPUNSKU (PRODUŽNU) NASTAVU IZ MATEMATIKE (za 1. razred) Učenik prvog razreda treba ostvarit sljedeće minimalne standarde 1. SKUP REALNIH BROJEVA -razlikovati brojevne skupove i njihove
ВишеSatnica.xlsx
ПОНЕДЕЉАК 10.06.19 2Б Алгоритми и програмирање - КОЛОКВИЈУМ 64 А3 2Б Алгоритми и програмирање - КОЛОКВИЈУМ 46 Ч1 2Б Алгоритми и програмирање - КОЛОКВИЈУМ 70 Ч2 2Б Алгоритми и програмирање - КОЛОКВИЈУМ
ВишеSveucilište u Zagrebu
Proširivanje Pythona programskim jezicima C/C++ Ivo Majić Mentor: Doc. dr. sc. Domagoj Jakobović Sveučilište u Zagrebu Fakultet elektrotehnike i računarstva Ak. god. 2011/12 Ivo Majić (FER) Sveučilište
ВишеUpute za instaliranje WordPressa 1.KORAK Da biste instalirali Wordpress, najprije morate preuzeti najnoviju verziju programa s web stranice WordPressa
1.KORAK Da biste instalirali Wordpress, najprije morate preuzeti najnoviju verziju programa s web stranice WordPressa koju možete pronaći na sljedećem linku: http://wordpress.org/download/ Kliknite na
ВишеAKVIZICIJA PODATAKA SA UREĐAJEM NI USB-6008 NI USB-6008 je jednostavni višenamjenski uređaj koji se koristi za akviziciju podataka (preko USBa), kao i
AKVIZICIJA PODATAKA SA UREĐAJEM NI USB-6008 NI USB-6008 je jednostavni višenamjenski uređaj koji se koristi za akviziciju podataka (preko USBa), kao i za generisanje željenih izlaznih signala (slika 1).
ВишеCARNET Helpdesk - Podrška obrazovnom sustavu e-dnevnik upute za nadzor razrednih knjiga tel: fax: mail:
Sadržaj... 1 1. Predgovor... 2 2. Prijava u sustav... 2 3. Postavke... 3 4. Kreiranje zahtjeva za nadzorom razrednih knjiga... 4 5. Pregled razredne knjige... 6 5.1 Dnevnik rada... 7 5.2 Imenik... 11 5.3
ВишеAlgoritmi SŠ P1
Državno natjecanje iz informatike Srednja škola Prvi dan natjecanja 2. ožujka 219. ime zadatka BADMINTON SJEME MANIPULATOR vremensko ograničenje 1 sekunda 1 sekunda 3 sekunde memorijsko ograničenje 512
ВишеPowerPoint Presentation
Prof. dr Pere Tumbas Prof. dr Predrag Matkovid Identifikacija i izbor projekata Održavanje sistema Inicijalizacija projekata i planiranje Implementacija sistema Dizajn sistema Analiza sistema Faze životnog
ВишеOblikovanje i analiza algoritama 4. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb OAA 2017, 4. pr
Oblikovanje i analiza algoritama 4. predavanje Saša Singer singer@math.hr web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb OAA 2017, 4. predavanje p. 1/69 Sadržaj predavanja Složenost u praksi
Више