{"id":955,"date":"2019-07-22T23:15:33","date_gmt":"2019-07-22T21:15:33","guid":{"rendered":"http:\/\/wchmurze.cloud\/?p=955"},"modified":"2020-02-13T22:10:01","modified_gmt":"2020-02-13T21:10:01","slug":"jetson-nano-lot-na-ksiezyc-i-uczenie-maszynowe","status":"publish","type":"post","link":"https:\/\/wchmurze.cloud\/index.php\/2019\/07\/22\/jetson-nano-lot-na-ksiezyc-i-uczenie-maszynowe\/","title":{"rendered":"Jetson nano, lot na Ksi\u0119\u017cyc i uczenie maszynowe."},"content":{"rendered":"\r\n<p>W\u0142a\u015bnie mija 50 lat od od momentu, gdy ludzka stopa postawi\u0142a sw\u00f3j odcisk na najbli\u017cszym satelicie, czyli na Ksi\u0119\u017cycu. W g\u0142owie ko\u0142acze si\u0119 wiele my\u015bli, co z tego wynik\u0142o, czy by\u0142o warto, ile to kosztowa\u0142o. Wa\u017cne co z tego wynik\u0142o, czy korzystamy z tej wiedzy, nawet je\u015bli tak, to niewiele z niej kojarzymy wprost z tym projektem.<\/p>\r\n\r\n\r\n\r\n<p> Obok le\u017cy nowy smartfon firmy H. Pob\u0142yskuje od czasu do czasu zielon\u0105 diod\u0105 sygnalizuj\u0105c\u0105 nadej\u015bcie nowej wiadomo\u015bci. Co zrobiliby prowadz\u0105cy program Apollo z takim urz\u0105dzeniem, kt\u00f3rego moc obliczeniowa przekracza x   (<em>kto jest ch\u0119tny poda\u0107 x<\/em>) razy to co by\u0142 w ich zasi\u0119gu, a waga jest u\u0142amkiem \u00f3wczesnych twardych dysk\u00f3w i komputer\u00f3w. Co ciekawe, w tamtych czasach  s\u0142owo <strong>computer <\/strong>oznacza\u0142o osob\u0119 zajmuj\u0105c\u0105 si\u0119 obliczeniami, to taki nasz wsp\u00f3\u0142czesny <strong>data scientist<\/strong> ?  <\/p>\r\n\r\n\r\n\r\n<p>Zrobi\u0142em przegl\u0105d moich urz\u0105dze\u0144 w domu, jeden desktop z 2008 roku, i trzy laptopy biznesowe, kt\u00f3re s\u0142u\u017c\u0105 mi do pracy, rozrywki i zabawy. Od pewnego czasu postanowi\u0142em wr\u00f3ci\u0107 do korzeni i co\u015b policzy\u0107. Kilka lat mojego \u017cycia po\u015bwieci\u0142em na liczeniu symulacji opartych g\u0142\u00f3wnie o metod\u0119 Monte Carlo, j\u0119zyk Fortran nie jest mi nieznany. Ten sam,  kt\u00f3ry by\u0142  wykorzystywany w czasach moich urodzin. Wszystkim m\u0142odym adeptom IT polecam tak\u0105 wycieczk\u0119 do przesz\u0142o\u015bci. Te moje urz\u0105dzenia niestety nie nadawa\u0142y si\u0119 do wykonania oblicze\u0144 g\u0142\u0119bokich sieci neuronowych.  Rozpocz\u0105\u0142em poszukiwania, co mog\u0119 z tym zrobi\u0107. Wyb\u00f3r pad\u0142 na p\u0142ytk\u0119 podobn\u0105 do Raspberry PI, ale posiadaj\u0105c\u0105 wbudowan\u0105 kart\u0119 GPU, kt\u00f3ra umo\u017cliwia w sensowym czasie (!)  rozpocz\u0119cie przygody  z uczeniem g\u0142\u0119bokim.  W ten spos\u00f3b pozna\u0142em <a href=\"https:\/\/developer.nvidia.com\/embedded\/jetson-nano-developer-kit\">Jetsona Nano<\/a>.  Postanowi\u0142em zrobi\u0107 moje prywatne GPU w moje sieli lokalnej z dost\u0119pem z dowolnego laptopa lub nawet z telefonu kom\u00f3rkowego.  Zanim zam\u00f3wi\u0142em czyta\u0142em fora i blogi podobnych mnie pasjonat\u00f3w. Zawsze pozostaje <a href=\"https:\/\/colab.research.google.com\/\">Colab<\/a> od Google, kt\u00f3ry udost\u0119pnia za darmo wsp\u00f3\u0142dzielon\u0105 kart\u0119 GPU K-80 Tesla. W g\u0142owie  pojawi\u0142y si\u0119 aplikacje rozpoznaj\u0105ce j\u0119zyk, twarz, znaki drogowe, litery, cyfry, psy i koty. Postanowi\u0142em to sprawdzi\u0107, ale nie tak jak pokazuje to producent urz\u0105dzenia. Wykorzystam je nieco inaczej ni\u017c planowano u producenta.<br><\/p>\r\n\r\n\r\n\r\n<p>W por\u00f3wnaniu do Raspberry PI wersji 3 urz\u0105dzenie jest wi\u0119ksze, posiada radiator osadzony na GPU z mo\u017cliwo\u015bci\u0105  pod\u0142\u0105czenia wentylatora i sterowania pr\u0119dko\u015bci\u0105 jego obrot\u00f3w.  Dedykowany system operacyjny jest dost\u0119pny na stronie Nvidia . Potrzebujemy czterech rzeczy do uruchomienia urz\u0105dzenia. <\/p>\r\n\r\n\r\n\r\n<p>1.Zasilacz, kt\u00f3ry mo\u017cna pod\u0142\u0105czy\u0107 do z\u0142\u0105cza micro-usb, albo do dedykowanego z\u0142\u0105cza. Ja zdecydowa\u0142em si\u0119 na to drugie rozwi\u0105zanie, gdy\u017c wydajno\u015b\u0107 pr\u0105dowa przekracza wtedy 2A.  Nale\u017cy pami\u0119ta\u0107, \u017ce korzystanie z tego z\u0142\u0105cza wymaga za\u0142o\u017cenia jumpera na odpowiednie piny na p\u0142ytce. Instrukcja m\u00f3wi o tym, ale pierwsze wra\u017cenie po pod\u0142\u0105czeniu zasilania i martwym urz\u0105dzeniu nie nale\u017ca\u0142o do najmilszych.<\/p>\r\n\r\n\r\n\r\n<p>2.P\u0142ytk\u0119 micro-SD o minimalnej pojemno\u015bci 16GB, ale  nie radz\u0119 korzysta\u0107 z takiej i zainwestowa\u0107 od razu w minimum 64GB.<\/p>\r\n\r\n\r\n\r\n<p>3.Kabel LAN, gdy\u017c producent nie umie\u015bci\u0142 uk\u0142ad\u00f3w odpowiedzialnych za WIFI i Bluetooth. Co dziwi, gdy\u017c w dobie IoT pozbycie si\u0119 na starcie \u0142\u0105czno\u015bci bezprzewodowej jest co najmniej dyskusyjne. Z drugiej strony mo\u017ce to \u015bwiadczy\u0107, i\u017c g\u0142\u00f3wnym celem u\u017cywania tego typu urz\u0105dzenia nie jest zastosowanie produkcyjne, a raczej deweloperskie.  A dla mnie to ma by\u0107 moje prywatne GPU wpi\u0119te w domow\u0105 sie\u0107 lokaln\u0105. Takie odpowiednik GPU as a Service.<\/p>\r\n\r\n\r\n\r\n<p>4. Kable HDMI, klawiatura USB, mysz USB.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"404\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/jetson_opakowanie_paczka-1024x404.jpg\" alt=\"\" class=\"wp-image-967\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/jetson_opakowanie_paczka-1024x404.jpg 1024w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/jetson_opakowanie_paczka-300x118.jpg 300w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/jetson_opakowanie_paczka-768x303.jpg 768w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/jetson_opakowanie_paczka.jpg 1123w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption>P\u0142ytka w oryginalnym opakowaniu.<\/figcaption><\/figure>\r\n\r\n\r\n\r\n<p>Dedykowany system operacyjny mo\u017cna \u015bci\u0105gn\u0105\u0107 ze strony Nvidia<\/p>\r\n\r\n\r\n\r\n<p><a href=\"https:\/\/developer.nvidia.com\/embedded\/learn\/get-started-jetson-nano-devkit#write\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (otwiera si\u0119 na nowej zak\u0142adce)\">https:\/\/developer.nvidia.com\/embedded\/learn\/get-started-jetson-nano-devkit#write<\/a><\/p>\r\n\r\n\r\n\r\n<p>Proces pobrania oprogramowania jest dobrze opisany, zapisujemy oprogramowanie na karcie , kart\u0119 wk\u0142adamy do slotu, kt\u00f3rego znalezienie za pierwszym razem mo\u017ce sprawdzi\u0107 trudno\u015bci. Jest na \u015brodku tu\u017c pod radiatorem. <\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" loading=\"lazy\" width=\"770\" height=\"1024\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/jetson_nagi-770x1024.jpg\" alt=\"\" class=\"wp-image-966\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/jetson_nagi-770x1024.jpg 770w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/jetson_nagi-226x300.jpg 226w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/jetson_nagi-768x1021.jpg 768w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/jetson_nagi.jpg 777w\" sizes=\"(max-width: 770px) 100vw, 770px\" \/><figcaption>P\u0142ytka pod\u0142\u0105czona do myszki, klawiatury i monitora <\/figcaption><\/figure>\r\n\r\n\r\n\r\n<p> Po pod\u0142\u0105czeniu  monitora, klawiatury, myszki i kabla sieciowego naszym oczom ukazuje si\u0119 Ubuntu w wersji desktopowej. <\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"602\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/jetson_desktop2-1024x602.jpg\" alt=\"\" class=\"wp-image-962\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/jetson_desktop2-1024x602.jpg 1024w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/jetson_desktop2-300x176.jpg 300w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/jetson_desktop2-768x451.jpg 768w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/jetson_desktop2.jpg 1145w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption>Ubuntu w wersji desktopowej<\/figcaption><\/figure>\r\n\r\n\r\n\r\n<p>Po chwilowym zachwycie i ustaleniu hase\u0142 przysz\u0142a pora na w\u0142a\u015bciw\u0105 konfiguracj\u0119 oprogramowania. Nie kupowa\u0142em kamer i innych dodatkowych urz\u0105dze\u0144, kt\u00f3re mo\u017cna pod\u0142\u0105czy\u0107 do GPIO.<\/p>\r\n\r\n\r\n\r\n<p>P\u0142ytka wyposa\u017cona jest w 4GB pami\u0119ci DIMM, ale nale\u017cy pami\u0119ta\u0107, \u017ce jest to pami\u0119\u0107 wsp\u00f3\u0142dzielona z systemem operacyjnym.  To co nale\u017cy zrobi\u0107 na pocz\u0105tek to rozszerzy\u0107 pamie\u0107 urz\u0105dzenia o plik swap. O tym kroku nie nale\u017cy zapomnie\u0107, gdy\u017c \u0142atwo podczas trenowania sieci neuronowej wype\u0142ni\u0107 ca\u0142\u0105 pami\u0119\u0107 ulotn\u0105 i po\u0142o\u017cy\u0107 system na \u0142opatki.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\r\nsudo fallocate -l 8G \/swapfile\r\nsudo chmod 600 \/swapfile\r\nsudo mkswap \/swapfile\r\nsudo swapon \/swapfile\r\necho \"\/swapfile swap swap defaults 0 0\" | sudo tee --append \/etc\/fstab > \/dev\/null<\/code><\/pre>\r\n\r\n\r\n\r\n<p>Drug\u0105 rzecz\u0105, kt\u00f3r\u0105 warto zrobi\u0107 to pobra\u0107 proste narz\u0119dzie do monitoringu obci\u0105\u017cenia systemu podczas pracy z modelami uczenia maszynowego.<\/p>\r\n\r\n\r\n\r\n<p><a href=\"https:\/\/github.com\/rbonghi\/jetson_stats\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (otwiera si\u0119 na nowej zak\u0142adce)\">https:\/\/github.com\/rbonghi\/jetson_stats<\/a><\/p>\r\n\r\n\r\n\r\n<p>Na pocz\u0105tku czeka nas instalacja podstawowych pakiet\u00f3w z pythonem 3<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>sudo apt-get install git cmake\r\nsudo apt-get install libatlas-base-dev gfortran\r\nsudo apt-get install libhdf5-serial-dev hdf5-tools\r\nsudo apt-get install python3-dev\r\nsudo apt-get install python3-matplotlib\r\nsudo apt-get install libfreetype6-dev # for matplot \r\nsudo apt-get install python3-pil # for matplot <\/code><\/pre>\r\n\r\n\r\n\r\n<p>Nast\u0119pnie instalujemy pip i \u015brodowisko wirtualne. To ostatnie umo\u017cliwia odseparowania od siebie w obr\u0119bie tej samej maszyny ro\u017cnych konfiguracji zainstalowanego oprogramowania. W moim przypadku b\u0119dzie to Tensorflow z obs\u0142ug\u0105 GPU i Keras jako nak\u0142adka na niego<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>wget https:\/\/bootstrap.pypa.io\/get-pip.py\r\nsudo python3 get-pip.py\r\nrm get-pip.py\r\n\r\nsudo pip install virtualenv virtualenvwrapper<\/code><\/pre>\r\n\r\n\r\n\r\n<p>Tworzymy nowe \u015brodowisko wirtualne o nazwie deep_learning<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code># edycja pliku\r\nnano ~\/.bashrc\r\n\r\n# i dodanie na jego ko\u0144cu\r\n\r\n# virtualenv and virtualenvwrapper\r\nexport WORKON_HOME=$HOME\/.virtualenvs\r\nexport VIRTUALENVWRAPPER_PYTHON=\/usr\/bin\/python3\r\nsource \/usr\/local\/bin\/virtualenvwrapper.sh\r\n# tworzenie \u015brodowiska wirtualnego dla pythona 3.\r\nmkvirtualenv deep_learning -p python3<\/code><\/pre>\r\n\r\n\r\n\r\n<p>Po uruchomieniu \u015brodowiska wirtualnego instalujemy niezb\u0119dne programowanie. Wersja Tensorflow, kt\u00f3ra nale\u017cy wykorzysta\u0107 nie pochodzi ze standardowego repozytorium PIP, prosz\u0119 nie robi\u0107 &#8220;&#8221;<strong>pip install tensorflow-gpu<\/strong>&#8220;. Jest umieszczony w zasobach NVidia. Nale\u017cy si\u0119 uzbroi\u0107 w cierpliwo\u015b\u0107, gdy\u017c instalacja pakiet\u00f3w zajmuje wiele minut, z tego co zaobserwowa\u0142em wykorzystywana jest wtedy tylko jeden rdze\u0144 CPU.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code># uruchomienie kontekstu srodowiska o nazwie deep_learning\r\nworkon deep_learning\r\n\r\npip install numpy\r\n\r\npip install --extra-index-url https:\/\/developer.download.nvidia.com\/compute\/redist\/jp\/v42 tensorflow-gpu==1.13.1+nv19.3\r\n\r\npip install scipy\r\npip install keras\r\npip install dlib\r\npip install imutils<\/code><\/pre>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" loading=\"lazy\" width=\"675\" height=\"424\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/jetson_instalacja_pip.png\" alt=\"\" class=\"wp-image-964\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/jetson_instalacja_pip.png 675w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/jetson_instalacja_pip-300x188.png 300w\" sizes=\"(max-width: 675px) 100vw, 675px\" \/><figcaption>Instalacja przyk\u0142adowego pakietu<\/figcaption><\/figure>\r\n\r\n\r\n\r\n<p>Za\u0142o\u017cy\u0142em od pocz\u0105tku, \u017ce eksperymentowanie z budow\u0105 modeli uczenia g\u0142\u0119bokiego rozpoczn\u0119 w notatnikach jupytera. Istnieje wtedy mo\u017cliwo\u015b\u0107 wybrania jako j\u0105dra \u015brodowiska wirtualnego i korzystanie z zainstalowanych pakiet\u00f3w.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code># instalacja notatnikow jupytera\r\npip install ipykernel\r\npip install jupyter notebook \r\nipython kernel install --user --name=deep_learning<\/code><\/pre>\r\n\r\n\r\n\r\n<p>Je\u017celi nie b\u0119dziemy pracowa\u0107 ze \u015brodowiskiem graficznym Ubuntu, a naszym celem jest maksymalne wykorzystanie zasob\u00f3w dla modeli uczenia maszynowego mo\u017cemy pozby\u0107 si\u0119 zb\u0119dnego oprogramowania.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\r\nsudo systemctl enable multi-user.target\r\nsudo systemctl set-default multi-user.target\r\nsudo apt-get -y purge whoopsie\r\nsudo apt-get -y purge unattended-upgrades\r\nsudo apt-get -y purge modemmanager<\/code><\/pre>\r\n\r\n\r\n\r\n<p>M\u00f3j model pracy z Jetsonem Nano to pod\u0142\u0105czenie si\u0119 przez SSH. Startuj\u0119 ze \u015brodowiskiem wirtualnym i uruchamiam notatnik. Po podaniu wygenerowanego tokena<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code># uruchomienie kontekstu srodowiska wirtualnego\r\nworkon deep_learning\r\n# uruchomienie notatnika\r\njupyter notebook<\/code><\/pre>\r\n\r\n\r\n\r\n<p>Dodatkowo w konfiguracji SSH dokonuj\u0119 forwardowania portu 8888 i w ten spos\u00f3b ca\u0142o\u015b\u0107 pracy przeprowadzam na laptopie. P\u0142ytka jest w tym modelu wykorzystywana jako us\u0142uga. Wystarczy uruchomi\u0107 adres <a rel=\"noreferrer noopener\" aria-label=\"http:\/\/localhost:8888 (otwiera si\u0119 na nowej zak\u0142adce)\" href=\"http:\/\/localhost:8888\" target=\"_blank\">http:\/\/localhost:8888<\/a><\/p>\r\n\r\n\r\n\r\n<p>W przypadku popularnego klienta ssh jakim jest putty konfiguracja wygl\u0105da nast\u0119puj\u0105co<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" loading=\"lazy\" width=\"466\" height=\"448\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/putty_tunnels.png\" alt=\"\" class=\"wp-image-988\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/putty_tunnels.png 466w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/putty_tunnels-300x288.png 300w\" sizes=\"(max-width: 466px) 100vw, 466px\" \/><figcaption>Tunelowanie port\u00f3w na przyk\u0142adzie putty<\/figcaption><\/figure>\r\n\r\n\r\n\r\n<p>W momencie kupna urz\u0105dzenia w zestawie z zasilaczem nie uda\u0142o si\u0119 znale\u017a\u0107 gotowej obudowy. Na szcz\u0119\u015bcie pojawi\u0142a si\u0119 mo\u017cliwo\u015b\u0107 pobrania gotowego projektu do druku 3D i w ten spos\u00f3b p\u0142ytka zosta\u0142a opakowana w kolorowe pude\u0142ko.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" loading=\"lazy\" width=\"768\" height=\"1024\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/jetson1-768x1024.jpg\" alt=\"\" class=\"wp-image-968\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/jetson1-768x1024.jpg 768w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/jetson1-225x300.jpg 225w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/jetson1.jpg 1920w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/><figcaption>Nvidia Jetson Nano w obudowie wydrukowanej w 3D<\/figcaption><\/figure>\r\n\r\n\r\n\r\n<p>Podczas treningu modelu warto obserwowa\u0107 jak obci\u0105\u017cona jest pami\u0119\u0107 (Mem) , procesor graficzny (GPU) i jego temperatura (thermal)<\/p>\r\n\r\n\r\n\r\n<p>Na ko\u0144cu nadszed\u0142 czas na ma\u0142e demo, kt\u00f3re przygotowa\u0142em korzystaj\u0105c z przyk\u0142ad\u00f3w zawartych w ksi\u0105\u017cce, kt\u00f3r\u0105 polecam.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" loading=\"lazy\" width=\"555\" height=\"555\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/keras_book.jpg\" alt=\"\" class=\"wp-image-980\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/keras_book.jpg 555w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/keras_book-150x150.jpg 150w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/keras_book-300x300.jpg 300w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/keras_book-144x144.jpg 144w\" sizes=\"(max-width: 555px) 100vw, 555px\" \/><\/figure>\r\n\r\n\r\n\r\n<p>Na pocz\u0105tku sprawdzam, czy wszystkie potrzebne pakiety. Tensorflow  jest ju\u017c zainstalowany, pakiet Keras wykorzystuje go w tle, a pakiet matplotlib s\u0142u\u017cy do wizualizacji danych. Podczas tworzenia notatnika nale\u017cy wybra\u0107 kernel o nazwie deep_learning. Wtedy mamy dost\u0119p do zainstalowanych pakiet\u00f3w w wirtualnym \u015brodowisku o tej nazwie<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>import subprocess\r\nimport sys\r\nreqs = subprocess.check_output([sys.executable, '-m', 'pip', 'freeze'])\r\ninstalled_packages = [r.decode().split('==')[0] for r in reqs.split()]\r\n\r\nimport sys\r\n\r\n# Keras\r\nif  not 'keras' in installed_packages:\r\n  !pip install keras\r\n\r\n# Matplotlib\r\nif  not 'matplotlib' in installed_packages:\r\n  !pip install matplotlib\r\nimport matplotlib\r\n# sprawdzamy jego wersje \r\nprint ('Matplotlib version :',matplotlib.__version__)\r\n\r\nimport tensorflow as tf\r\nprint(\"Tensorflow version :\",tf.__version__)\r\n\r\nimport keras\r\nprint(\"Keras version: \",keras.__version__)\r\n\r\n# Matplotlib version : 3.1.0\r\n# Tensorflow version : 1.13.1\r\n# Keras version:  2.2.4\r\n\r\n# Using TensorFlow backend.\r\n<\/code><\/pre>\r\n\r\n\r\n\r\n<p>Naszym zbiorem na kt\u00f3rym zbuduj\u0119 model klasyfikacji obraz\u00f3w jest najbardziej znany MNIST, czyli zestaw ma\u0142ych obraz\u00f3w wielko\u015bci 28&#215;28 pikseli w 256 odcieniach szaro\u015bci. \u0141atwo policzy\u0107, \u017ce jeden taki obraz zawiera 28*28 =784 liczby ca\u0142kowite w zakresie 8 bit\u00f3w bez znaku. Zbi\u00f3r treningowy zawiera 60 ty\u015b takich obraz\u00f3w, a zbi\u00f3r testowy s\u0142u\u017c\u0105cy do walidacji jako\u015bci naszego modelu zawiera ich 10 ty\u015b. Pakiet Keras zawiera zbi\u00f3r MNIST jako jeden z gotowych do u\u017cycia.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>from keras.datasets import mnist\r\n(train_images, train_labels), (test_images, test_labels) = mnist.load_data()\r\ntrain_images.shape\r\n#(60000, 28, 28)\r\ntest_images.shape\r\n#(10000, 28, 28)<\/code><\/pre>\r\n\r\n\r\n\r\n<p>Jak wygl\u0105da przyk\u0142adowy obraz ? Wylosujmy jeden z 60 tysi\u0119cy. Zbi\u00f3r danych zawiera wy\u0142\u0105cznie cyfry od 0 do 9, czyli mamy do czynienia z klasyfikacj\u0105 wieloklasow\u0105. S\u0105 dost\u0119pne te\u017c inne podobne zbiory danych np. EMNIST, lub zestaw Zalando, ale z punktu widzenia budowy modelu s\u0105 bardzo podobne.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>import matplotlib.pyplot as plt\r\n%matplotlib inline \r\n\r\nimport random\r\n# Losowa wartosc miedzy 0-60000\r\nimage_num=random.randint(0, 60000)\r\nprint(\"Train image:\",image_num)\r\nprint(\"Train label:\",train_labels[image_num])\r\ndigit=train_images[image_num]\r\nplt.imshow(digit,cmap=plt.cm.binary)\r\nplt.show()\r\n\r\n# Train image: 44666\r\n# Train label: 6<\/code><\/pre>\r\n\r\n\r\n\r\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" loading=\"lazy\" width=\"251\" height=\"248\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/sample_mnist.png\" alt=\"\" class=\"wp-image-991\"\/><figcaption>Przyk\u0142adowy obraz ze zbioru MNIST<\/figcaption><\/figure><\/div>\r\n\r\n\r\n\r\n<p>Pe\u0142en kod \u017ar\u00f3d\u0142owy notatnika umie\u015bci\u0142em pod adresem<\/p>\r\n\r\n\r\n\r\n<p>Przygotowujemy definicj\u0119 naszej sieci neuronowej. W przypadku pakietu Keras jest to bardzo proste (dla ch\u0119tnych pro\u015bba o poszukanie tego samego w czystym Tensorflow, kt\u00f3ry pracuje w tle). Na wej\u015bciu modelu mamy macierz 28*28, na wyj\u015bciu natomiast wektor zawieraj\u0105cy dziesi\u0119\u0107 element\u00f3w. Na warstwie wyj\u015bciowej mamy dodatkowo zastosowany SoftMax, kt\u00f3ry potrafi z element\u00f3w wyznaczy\u0107 ten, kt\u00f3ry najlepiej opisuje wyznaczon\u0105 klas\u0119. Dodatkowo mo\u017cemy otrzyma\u0107 prawdopodobie\u0144stwo takiej transformacji.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>from keras import models\r\nfrom keras import layers\r\n\r\nnetwork = models.Sequential()\r\nnetwork.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,)))\r\nnetwork.add(layers.Dense(10, activation='softmax'))\r\nfrom tensorflow.keras.utils import plot_model\r\nfrom IPython.display import Image\r\n\r\nplot_model(network, to_file='mnist.png', show_shapes=True)\r\nImage('mnist.png')<\/code><\/pre>\r\n\r\n\r\n\r\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" loading=\"lazy\" width=\"331\" height=\"281\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/keras_simple_model.png\" alt=\"\" class=\"wp-image-992\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/keras_simple_model.png 331w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/keras_simple_model-300x255.png 300w\" sizes=\"(max-width: 331px) 100vw, 331px\" \/><figcaption>Wizualizacja prostej sieci w pakiecie Keras<\/figcaption><\/figure><\/div>\r\n\r\n\r\n\r\n<p>Przygotowujemy startowe parametry dla naszego modelu. Robimy kilka przekszta\u0142ce\u0144, kt\u00f3re  przygotowuj\u0105 dane wej\u015bciowe do formatu optymalnego dla sieci neuronowej. Macierz 28&#215;28 jest rozci\u0105gni\u0119ta w wektor sk\u0142adaj\u0105cy si\u0119 z 784 liczb. Liczby ca\u0142kowite s\u0105 zamienione na liczby rzeczywiste z przedzia\u0142u od 0 do 1. Etykiety  s\u0105 zamienione na zmienne kategoryczne.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>network.compile(optimizer='rmsprop',\r\n                loss='categorical_crossentropy',\r\n                metrics=['accuracy'])\r\n\r\ntrain_images = train_images.reshape((60000, 28 * 28))\r\ntrain_images = train_images.astype('float32') \/ 255\r\ntest_images = test_images.reshape((10000, 28 * 28))\r\ntest_images = test_images.astype('float32') \/ 255\r\n\r\nfrom keras.utils import to_categorical\r\ntrain_labels = to_categorical(train_labels)\r\ntest_labels = to_categorical(test_labels)<\/code><\/pre>\r\n\r\n\r\n\r\n<p>Rozpoczynamy trenowanie naszego modelu.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>network.fit(train_images, train_labels, epochs=5, batch_size=128)<\/code><\/pre>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\">Epoch 1\/5 60000\/60000 [==============================] - 14s 236us\/step - loss: 0.2562 - acc: 0.9246 <br>Epoch 2\/5 60000\/60000 [==============================] - 11s 178us\/step - loss: 0.1045 - acc: 0.9685 <br>Epoch 3\/5 60000\/60000 [==============================] - 10s 170us\/step - loss: 0.0695 - acc: 0.9794 <br>Epoch 4\/5 60000\/60000 [==============================] - 11s 188us\/step - loss: 0.0510 - acc: 0.9846 <br>Epoch 5\/5 60000\/60000 [==============================] - 11s 191us\/step - loss: 0.0377 - acc: 0.9882<br><br>Uzyskali\u015bmy ju\u017c po pi\u0119ciu cyklach dok\u0142adno\u015b\u0107 rz\u0119du 99%.<\/pre>\r\n\r\n\r\n\r\n<p>Tak wytrenowany model musimy zweryfikowa\u0107 za pomoc\u0105 zbioru testowego, kt\u00f3ry do tej pory nie bra\u0142 udzia\u0142u w obliczeniach.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>test_loss, test_acc = network.evaluate(test_images, test_labels)\r\n\r\n# evaluate the model\r\nscores = network.evaluate(test_images, test_labels, verbose=1)\r\nprint(\"%s: %.4f%%\" % (network.metrics_names[0], scores[0]))\r\nprint(\"%s: %.4f%%\" % (network.metrics_names[1], scores[1]))<\/code><\/pre>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\">10000\/10000 [==============================] - 2s 182us\/step\r\n10000\/10000 [==============================] - 2s 168us\/step\r\nloss: 0.0708%\r\nacc: 0.9789%<\/pre>\r\n\r\n\r\n\r\n<p>Po weryfikacji na grupie 10 tysi\u0119cy obraz\u00f3w zbioru testowego nasza dok\u0142adno\u015b\u0107 modelu nieco spad\u0142a, ale i tak jest w pobli\u017cu 98%. <\/p>\r\n\r\n\r\n\r\n<p><a href=\"https:\/\/github.com\/djkormo\/jetson-nano\/blob\/master\/deep-learning\/FirstKerasDemoOnJetsonGPU.ipynb\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (otwiera si\u0119 na nowej zak\u0142adce)\">https:\/\/github.com\/djkormo\/jetson-nano\/blob\/master\/deep-learning\/FirstKerasDemoOnJetsonGPU.ipynb<\/a><\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" loading=\"lazy\" width=\"683\" height=\"440\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/jetson_jtop.png\" alt=\"\" class=\"wp-image-965\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/jetson_jtop.png 683w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/jetson_jtop-300x193.png 300w\" sizes=\"(max-width: 683px) 100vw, 683px\" \/><figcaption>Monitoring obci\u0105\u017cenia CPU, GPU i pami\u0119ci <\/figcaption><\/figure>\r\n\r\n\r\n\r\n<p>Wszystkie wykorzystane kody umie\u015bci\u0142em w repozytorium na githubie   <br><a href=\"https:\/\/github.com\/djkormo\/jetson-nano\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"https:\/\/github.com\/djkormo\/jetson-nano\/ (otwiera si\u0119 na nowej zak\u0142adce)\">https:\/\/github.com\/djkormo\/jetson-nano\/<\/a>  <\/p>\r\n\r\n\r\n\r\n<p>B\u0119d\u0105 tam sukcesywnie umieszczane eksperymenty z modelami uczenia maszynowego. Czy zakup p\u0142ytki to wielki krok do przybli\u017cenia uczenia g\u0142\u0119bokiego pod strzechy ? Czas poka\u017ce&#8230;.  To dopiero pocz\u0105tek, dla os\u00f3b kt\u00f3rym prezentowane tre\u015bci nie s\u0105 do ko\u0144ca jasne mam propozycj\u0119, komentujcie, szukajcie b\u0142\u0119d\u00f3w i nie\u015bcis\u0142o\u015bci.  Cz\u0142owiek na Ksi\u0119\u017cycu wyl\u0105dowa\u0142 przy wsp\u00f3\u0142pracy os\u00f3b z r\u00f3\u017cnych dziedzin, r\u00f3\u017cnych do\u015bwiadcze\u0144, i tu te\u017c tak by\u0107 powinno.<\/p>\r\n\r\n\r\n\r\n<p>Literatura:<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-embed-wordpress wp-block-embed is-type-wp-embed is-provider-pyimagesearch\"><div class=\"wp-block-embed__wrapper\">\r\n<blockquote class=\"wp-embedded-content\" data-secret=\"wQlbavZVfh\"><a href=\"https:\/\/www.pyimagesearch.com\/2019\/05\/06\/getting-started-with-the-nvidia-jetson-nano\/\">Getting started with the NVIDIA Jetson Nano<\/a><\/blockquote><iframe title=\"&#8220;Getting started with the NVIDIA Jetson Nano&#8221; &#8212; PyImageSearch\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" src=\"https:\/\/www.pyimagesearch.com\/2019\/05\/06\/getting-started-with-the-nvidia-jetson-nano\/embed\/#?secret=wQlbavZVfh\" data-secret=\"wQlbavZVfh\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\r\n<\/div><\/figure>\r\n\r\n\r\n\r\n<p><a href=\"https:\/\/forums.fast.ai\/t\/share-your-work-here\/27676\/1274\">https:\/\/forums.fast.ai\/t\/share-your-work-here\/27676\/1274<\/a><\/p>\r\n\r\n\r\n\r\n<p><a href=\"https:\/\/gist.github.com\/mgrantham18\/91dc07ce81f19667c58bb917db64a084\">https:\/\/gist.github.com\/mgrantham18\/91dc07ce81f19667c58bb917db64a084<\/a><\/p>\r\n\r\n\r\n\r\n<p><a rel=\"noreferrer noopener\" aria-label=\" (otwiera si\u0119 na nowej zak\u0142adce)\" href=\"https:\/\/jkjung-avt.github.io\/opencv-on-nano\/\" target=\"_blank\">https:\/\/jkjung-avt.github.io\/opencv-on-nano\/<\/a><\/p>\r\n\r\n\r\n\r\n<p><a href=\"https:\/\/blog.hackster.io\/getting-started-with-the-nvidia-jetson-nano-developer-kit-43aa7c298797\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (otwiera si\u0119 na nowej zak\u0142adce)\">https:\/\/blog.hackster.io\/getting-started-with-the-nvidia-jetson-nano-developer-kit-43aa7c298797<\/a><\/p>\r\n\r\n\r\n\r\n<p><\/p>\r\n","protected":false},"excerpt":{"rendered":"<p>W\u0142a\u015bnie mija 50 lat od od momentu, gdy ludzka stopa postawi\u0142a sw\u00f3j odcisk na najbli\u017cszym satelicie, czyli na Ksi\u0119\u017cycu. W g\u0142owie ko\u0142acze si\u0119 wiele my\u015bli, co z tego wynik\u0142o, czy by\u0142o warto, ile to kosztowa\u0142o. Wa\u017cne co z tego wynik\u0142o, &hellip; <a href=\"https:\/\/wchmurze.cloud\/index.php\/2019\/07\/22\/jetson-nano-lot-na-ksiezyc-i-uczenie-maszynowe\/\">Continued<\/a><\/p>\n","protected":false},"author":1,"featured_media":969,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[14,25,3,6],"tags":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.13 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Jetson nano, lot na Ksi\u0119\u017cyc i uczenie maszynowe. - W chmurze o chmurze i nie tylko<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wchmurze.cloud\/index.php\/2019\/07\/22\/jetson-nano-lot-na-ksiezyc-i-uczenie-maszynowe\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Jetson nano, lot na Ksi\u0119\u017cyc i uczenie maszynowe. - W chmurze o chmurze i nie tylko\" \/>\n<meta property=\"og:description\" content=\"W\u0142a\u015bnie mija 50 lat od od momentu, gdy ludzka stopa postawi\u0142a sw\u00f3j odcisk na najbli\u017cszym satelicie, czyli na Ksi\u0119\u017cycu. W g\u0142owie ko\u0142acze si\u0119 wiele my\u015bli, co z tego wynik\u0142o, czy by\u0142o warto, ile to kosztowa\u0142o. Wa\u017cne co z tego wynik\u0142o, &hellip; Continued\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wchmurze.cloud\/index.php\/2019\/07\/22\/jetson-nano-lot-na-ksiezyc-i-uczenie-maszynowe\/\" \/>\n<meta property=\"og:site_name\" content=\"W chmurze o chmurze i nie tylko\" \/>\n<meta property=\"article:published_time\" content=\"2019-07-22T21:15:33+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-02-13T21:10:01+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/miejsce_pracy.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"768\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"djkormo\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Napisane przez\" \/>\n\t<meta name=\"twitter:data1\" content=\"djkormo\" \/>\n\t<meta name=\"twitter:label2\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minut\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/wchmurze.cloud\/index.php\/2019\/07\/22\/jetson-nano-lot-na-ksiezyc-i-uczenie-maszynowe\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/wchmurze.cloud\/index.php\/2019\/07\/22\/jetson-nano-lot-na-ksiezyc-i-uczenie-maszynowe\/\"},\"author\":{\"name\":\"djkormo\",\"@id\":\"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323\"},\"headline\":\"Jetson nano, lot na Ksi\u0119\u017cyc i uczenie maszynowe.\",\"datePublished\":\"2019-07-22T21:15:33+00:00\",\"dateModified\":\"2020-02-13T21:10:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/wchmurze.cloud\/index.php\/2019\/07\/22\/jetson-nano-lot-na-ksiezyc-i-uczenie-maszynowe\/\"},\"wordCount\":1742,\"commentCount\":7,\"publisher\":{\"@id\":\"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323\"},\"articleSection\":[\"implementacja\",\"Jetson\",\"Machine Learning\",\"Python\"],\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/wchmurze.cloud\/index.php\/2019\/07\/22\/jetson-nano-lot-na-ksiezyc-i-uczenie-maszynowe\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/wchmurze.cloud\/index.php\/2019\/07\/22\/jetson-nano-lot-na-ksiezyc-i-uczenie-maszynowe\/\",\"url\":\"https:\/\/wchmurze.cloud\/index.php\/2019\/07\/22\/jetson-nano-lot-na-ksiezyc-i-uczenie-maszynowe\/\",\"name\":\"Jetson nano, lot na Ksi\u0119\u017cyc i uczenie maszynowe. - W chmurze o chmurze i nie tylko\",\"isPartOf\":{\"@id\":\"https:\/\/wchmurze.cloud\/#website\"},\"datePublished\":\"2019-07-22T21:15:33+00:00\",\"dateModified\":\"2020-02-13T21:10:01+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/wchmurze.cloud\/index.php\/2019\/07\/22\/jetson-nano-lot-na-ksiezyc-i-uczenie-maszynowe\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/wchmurze.cloud\/index.php\/2019\/07\/22\/jetson-nano-lot-na-ksiezyc-i-uczenie-maszynowe\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/wchmurze.cloud\/index.php\/2019\/07\/22\/jetson-nano-lot-na-ksiezyc-i-uczenie-maszynowe\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/wchmurze.cloud\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Jetson nano, lot na Ksi\u0119\u017cyc i uczenie maszynowe.\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/wchmurze.cloud\/#website\",\"url\":\"https:\/\/wchmurze.cloud\/\",\"name\":\"W chmurze o chmurze i nie tylko\",\"description\":\"W chmurze o chmurze i nie tylko\",\"publisher\":{\"@id\":\"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/wchmurze.cloud\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pl-PL\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323\",\"name\":\"djkormo\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/wchmurze.cloud\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/14a901b808871fa98086ae259c45d646?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/14a901b808871fa98086ae259c45d646?s=96&d=mm&r=g\",\"caption\":\"djkormo\"},\"logo\":{\"@id\":\"https:\/\/wchmurze.cloud\/#\/schema\/person\/image\/\"},\"url\":\"https:\/\/wchmurze.cloud\/index.php\/author\/djkormo\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Jetson nano, lot na Ksi\u0119\u017cyc i uczenie maszynowe. - W chmurze o chmurze i nie tylko","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/wchmurze.cloud\/index.php\/2019\/07\/22\/jetson-nano-lot-na-ksiezyc-i-uczenie-maszynowe\/","og_locale":"pl_PL","og_type":"article","og_title":"Jetson nano, lot na Ksi\u0119\u017cyc i uczenie maszynowe. - W chmurze o chmurze i nie tylko","og_description":"W\u0142a\u015bnie mija 50 lat od od momentu, gdy ludzka stopa postawi\u0142a sw\u00f3j odcisk na najbli\u017cszym satelicie, czyli na Ksi\u0119\u017cycu. W g\u0142owie ko\u0142acze si\u0119 wiele my\u015bli, co z tego wynik\u0142o, czy by\u0142o warto, ile to kosztowa\u0142o. Wa\u017cne co z tego wynik\u0142o, &hellip; Continued","og_url":"https:\/\/wchmurze.cloud\/index.php\/2019\/07\/22\/jetson-nano-lot-na-ksiezyc-i-uczenie-maszynowe\/","og_site_name":"W chmurze o chmurze i nie tylko","article_published_time":"2019-07-22T21:15:33+00:00","article_modified_time":"2020-02-13T21:10:01+00:00","og_image":[{"width":1024,"height":768,"url":"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/07\/miejsce_pracy.jpg","type":"image\/jpeg"}],"author":"djkormo","twitter_card":"summary_large_image","twitter_misc":{"Napisane przez":"djkormo","Szacowany czas czytania":"12 minut"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/wchmurze.cloud\/index.php\/2019\/07\/22\/jetson-nano-lot-na-ksiezyc-i-uczenie-maszynowe\/#article","isPartOf":{"@id":"https:\/\/wchmurze.cloud\/index.php\/2019\/07\/22\/jetson-nano-lot-na-ksiezyc-i-uczenie-maszynowe\/"},"author":{"name":"djkormo","@id":"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323"},"headline":"Jetson nano, lot na Ksi\u0119\u017cyc i uczenie maszynowe.","datePublished":"2019-07-22T21:15:33+00:00","dateModified":"2020-02-13T21:10:01+00:00","mainEntityOfPage":{"@id":"https:\/\/wchmurze.cloud\/index.php\/2019\/07\/22\/jetson-nano-lot-na-ksiezyc-i-uczenie-maszynowe\/"},"wordCount":1742,"commentCount":7,"publisher":{"@id":"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323"},"articleSection":["implementacja","Jetson","Machine Learning","Python"],"inLanguage":"pl-PL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/wchmurze.cloud\/index.php\/2019\/07\/22\/jetson-nano-lot-na-ksiezyc-i-uczenie-maszynowe\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/wchmurze.cloud\/index.php\/2019\/07\/22\/jetson-nano-lot-na-ksiezyc-i-uczenie-maszynowe\/","url":"https:\/\/wchmurze.cloud\/index.php\/2019\/07\/22\/jetson-nano-lot-na-ksiezyc-i-uczenie-maszynowe\/","name":"Jetson nano, lot na Ksi\u0119\u017cyc i uczenie maszynowe. - W chmurze o chmurze i nie tylko","isPartOf":{"@id":"https:\/\/wchmurze.cloud\/#website"},"datePublished":"2019-07-22T21:15:33+00:00","dateModified":"2020-02-13T21:10:01+00:00","breadcrumb":{"@id":"https:\/\/wchmurze.cloud\/index.php\/2019\/07\/22\/jetson-nano-lot-na-ksiezyc-i-uczenie-maszynowe\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wchmurze.cloud\/index.php\/2019\/07\/22\/jetson-nano-lot-na-ksiezyc-i-uczenie-maszynowe\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/wchmurze.cloud\/index.php\/2019\/07\/22\/jetson-nano-lot-na-ksiezyc-i-uczenie-maszynowe\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/wchmurze.cloud\/"},{"@type":"ListItem","position":2,"name":"Jetson nano, lot na Ksi\u0119\u017cyc i uczenie maszynowe."}]},{"@type":"WebSite","@id":"https:\/\/wchmurze.cloud\/#website","url":"https:\/\/wchmurze.cloud\/","name":"W chmurze o chmurze i nie tylko","description":"W chmurze o chmurze i nie tylko","publisher":{"@id":"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wchmurze.cloud\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pl-PL"},{"@type":["Person","Organization"],"@id":"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323","name":"djkormo","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/wchmurze.cloud\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/14a901b808871fa98086ae259c45d646?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/14a901b808871fa98086ae259c45d646?s=96&d=mm&r=g","caption":"djkormo"},"logo":{"@id":"https:\/\/wchmurze.cloud\/#\/schema\/person\/image\/"},"url":"https:\/\/wchmurze.cloud\/index.php\/author\/djkormo\/"}]}},"_links":{"self":[{"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/posts\/955"}],"collection":[{"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/comments?post=955"}],"version-history":[{"count":27,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/posts\/955\/revisions"}],"predecessor-version":[{"id":1097,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/posts\/955\/revisions\/1097"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/media\/969"}],"wp:attachment":[{"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/media?parent=955"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/categories?post=955"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/tags?post=955"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}