{"id":871,"date":"2019-03-01T23:52:37","date_gmt":"2019-03-01T22:52:37","guid":{"rendered":"http:\/\/wchmurze.cloud\/?p=871"},"modified":"2019-08-18T14:41:44","modified_gmt":"2019-08-18T12:41:44","slug":"uczenia-maszynowe-dla-ubogich-od-trenowania-modelu-do-dedykowanej-uslugi","status":"publish","type":"post","link":"https:\/\/wchmurze.cloud\/index.php\/2019\/03\/01\/uczenia-maszynowe-dla-ubogich-od-trenowania-modelu-do-dedykowanej-uslugi\/","title":{"rendered":"Uczenia maszynowe dla ubogich. Od trenowania modelu do dedykowanej us\u0142ugi. Cz\u0119\u015b\u0107 1"},"content":{"rendered":"<p>Jeden z pierwszych\u00a0 moich wpis\u00f3w na blogu dotyczy\u0142\u00a0 uczenia maszynowego wed\u0142ug wujka Google.<\/p>\n<p>Od tego czasu pojawi\u0142y si\u0119 nowe us\u0142ugi , kt\u00f3re znacznie u\u0142atwiaj\u0105 rozpocz\u0119cie pracy z modelami uczenia maszynowego.<\/p>\n<p>Postanowi\u0142em przybli\u017cy\u0107 jedn\u0105 z us\u0142ug Microsoftu, kt\u00f3r\u0105 mo\u017cna przetestowa\u0107 za darmo.<\/p>\n<p><a href=\"https:\/\/www.customvision.ai\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/www.customvision.ai\/<\/a><\/p>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-873\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_1.png\" alt=\"\" width=\"1495\" height=\"759\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_1.png 1495w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_1-300x152.png 300w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_1-768x390.png 768w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_1-1024x520.png 1024w\" sizes=\"(max-width: 1495px) 100vw, 1495px\" \/><\/p>\n<p>Spr\u00f3bujmy przygotowa\u0107 model, kt\u00f3ry potrafi klasyfikowa\u0107 zdj\u0119cia. Na zdj\u0119ciach b\u0119dziemy rozpoznawa\u0107 r\u00f3\u017cne zwierz\u0119ta.<\/p>\n<p>Serwis wymaga zalogowania si\u0119 na konto Microsoft, ja wykorzysta\u0142em sw\u00f3j LiveID.<\/p>\n<p>Po zalogowaniu tworzymy nowy projekt:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-874\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_2.png\" alt=\"\" width=\"525\" height=\"667\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_2.png 525w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_2-236x300.png 236w\" sizes=\"(max-width: 525px) 100vw, 525px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Wype\u0142niamy nazw\u0119 projektu, jego opis, projekt typu klasyfikatora (Classification) i typ klasyfikacji (MultiClass). W ten spos\u00f3b ka\u017cdy z obraz\u00f3w b\u0119dzie otagowany jedn\u0105 cech\u0105. Jako domen\u0119 u\u017cy\u0142em (General compact). Ustawienie modelu jako przeno\u015bnego b\u0119dzie wa\u017cne dla dalszej cz\u0119\u015bci naszej przygody, gdy b\u0119dziemy eksportowa\u0107 gotowy model.<\/p>\n<p>Jako zbioru treningowego dla trzech kategorii (kot, pies, ko\u0144) u\u017cy\u0142em zdj\u0119\u0107 z poni\u017cszych adres\u00f3w:<\/p>\n<p>a) psy i koty<\/p>\n<p><a href=\"https:\/\/www.floydhub.com\/fastai\/datasets\/cats-vs-dogs\/2\/train\">https:\/\/www.floydhub.com\/fastai\/datasets\/cats-vs-dogs\/2\/train<\/a><\/p>\n<p>b) konie:<\/p>\n<p><a href=\"https:\/\/jamie.shotton.org\/work\/data.html\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/jamie.shotton.org\/work\/data.html<\/a><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-878\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_3.png\" alt=\"\" width=\"1575\" height=\"745\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_3.png 1575w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_3-300x142.png 300w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_3-768x363.png 768w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_3-1024x484.png 1024w\" sizes=\"(max-width: 1575px) 100vw, 1575px\" \/> <img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-879\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_4.png\" alt=\"\" width=\"525\" height=\"597\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_4.png 525w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_4-264x300.png 264w\" sizes=\"(max-width: 525px) 100vw, 525px\" \/><\/p>\n<p>Dla ka\u017cdego z gatunk\u00f3w zwierz\u0105t za\u0142adowa\u0142em odpowiednio po sto zdj\u0119\u0107. To jest nasz zbi\u00f3r treningowy, kt\u00f3ry zawiera trzysta przypadk\u00f3w oznakowanych &#8220;cat&#8221;, &#8220;dog&#8221; lub &#8220;horse&#8221;. Ten zbi\u00f3r zawiera poprawnie przypisane otagowanie i jest baz\u0105 do przygotowania modelu uczenia maszynowego, kt\u00f3ry b\u0119dzie potrafi\u0142 odpowiedzie\u0107 na pytanie: Czy na zdj\u0119ciu (kt\u00f3rego model nie zna, gdy\u017c nie ma go w bazie treningowej) jest widoczny kot, pies, czy ko\u0144? Budujemy klasyfikator, kt\u00f3ry jest jednym z g\u0142\u00f3wnych algorytm\u00f3w uczenia nadzorowanego. To my dostarczamy baz\u0119 wiedzy i w niej zawieramy cech\u0119, kt\u00f3ra jest dla modelu prawd\u0105. <img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-880\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_5.png\" alt=\"\" width=\"514\" height=\"242\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_5.png 514w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_5-300x141.png 300w\" sizes=\"(max-width: 514px) 100vw, 514px\" \/> <img decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-881 aligncenter\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_6.png\" alt=\"\" width=\"1581\" height=\"753\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_6.png 1581w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_6-300x143.png 300w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_6-768x366.png 768w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_6-1024x488.png 1024w\" sizes=\"(max-width: 1581px) 100vw, 1581px\" \/><\/p>\n<p>Po za\u0142adowaniu wszystkich zdj\u0119\u0107 przyst\u0119pujemy do trenowania danych.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-882\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_7.png\" alt=\"\" width=\"1581\" height=\"753\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_7.png 1581w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_7-300x143.png 300w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_7-768x366.png 768w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_7-1024x488.png 1024w\" sizes=\"(max-width: 1581px) 100vw, 1581px\" \/><\/p>\n<p>Parametrami tak wytrenowanego modelu s\u0105 precyzja (precision) i czu\u0142o\u015b\u0107 (recall).<\/p>\n<p>Co oznaczaj\u0105 te dwie liczby?<\/p>\n<p>Zacznijmy od tego czym jest\u00a0 macierz pomy\u0142ek<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"irc_mi aligncenter\" src=\"http:\/\/mathspace.pl\/wp-content\/uploads\/2015\/11\/TPR_TNR_PPV_NPV_2.png\" alt=\"Image result for &quot;macierz pomy\u0142ek&quot;\" width=\"582\" height=\"475\" data-iml=\"1551473114940\" \/><\/p>\n<p>Na obrazie pokazano macierz pomy\u0142ek dla modelu uproszczonego do dw\u00f3ch stan\u00f3w.<\/p>\n<p>Za\u0142\u00f3\u017cmy, \u017ce na zdj\u0119ciu mo\u017ce by\u0107 kot (prawda, <strong>T<\/strong>(rue)) lub nie-kot (fa\u0142sz, <strong>F<\/strong>(false)). Nasz model predykcyjny wykrywa, tylko te dwa przypadki.<\/p>\n<p>Mamy cztery mo\u017cliwo\u015bci:<\/p>\n<ol>\n<li>Na zdj\u0119ciu jest kot, model wykrywa kota, mamy przypadek <span style=\"color: #008000;\">TP (True Positive)<\/span><\/li>\n<li>Na zdj\u0119ciu jest nie-kot, model wykrywa nie-kota, mamy przypadek <span style=\"color: #008000;\">TN (True Nagative)<\/span><\/li>\n<li>Na zdj\u0119ciu jest kot, model wykrywa nie-kota, mamy przypadek <span style=\"color: #ff0000;\">FN (False Negative)<\/span><\/li>\n<li>Na zdj\u0119ciu jest nie-kot, model wykrywa nie-kota, mamy przypadek\u00a0 <span style=\"color: #ff0000;\">FP (False Positive)<\/span><\/li>\n<\/ol>\n<p><strong>Precision<\/strong> (precyzja) to iloraz -&gt; TP\/(TP+FP)<\/p>\n<p><strong>Recall<\/strong> (czu\u0142o\u015b\u0107)\u00a0 to iloraz TP\/(TP+FN)<\/p>\n<p>Po przygotowaniu wytrenowanego modelu mo\u017cemy go wyeksportowa\u0107. Mamy kilka mo\u017cliwo\u015bci, mo\u017cemy zapisa\u0107 go do rozwoju na urz\u0105dzeniach mobilnych (iOS lub Android). Najciekawsz\u0105 opcj\u0105 jest, moim zdaniem mo\u017cliwo\u015b\u0107, kt\u00f3ra kryje si\u0119 pod nazwa DF (Dockerfile) .<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-883\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_8.png\" alt=\"\" width=\"395\" height=\"651\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_8.png 395w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_8-182x300.png 182w\" sizes=\"(max-width: 395px) 100vw, 395px\" \/><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-886\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_10.png\" alt=\"\" width=\"465\" height=\"317\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_10.png 465w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_10-300x205.png 300w\" sizes=\"(max-width: 465px) 100vw, 465px\" \/><\/p>\n<p>Model raz nauczony mo\u017cna te\u017c w prosty spos\u00f3b testowa\u0107 na nowych zdj\u0119ciach. Te nowe zdj\u0119cia mog\u0105 by\u0107 kolejnym wsadem, kt\u00f3ry rozbudowuje nasz\u0105 baz\u0119 wiedzy dla danych treningowych.\u00a0 Pami\u0119tajmy, \u017ce proces uczenia ma cz\u0119sto cykliczny charakter.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-885\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_9.png\" alt=\"\" width=\"1237\" height=\"745\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_9.png 1237w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_9-300x181.png 300w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_9-768x463.png 768w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/02\/customvision_9-1024x617.png 1024w\" sizes=\"(max-width: 1237px) 100vw, 1237px\" \/>Pobieramy spakowany kod aplikacji w Pythonie, kt\u00f3ra wykorzystuje jako silnik uczenia maszynowego TensorFlow, serwerem www jest Flask.<\/p>\n<p>Cz\u0119\u015bci\u0105 takiej aplikacji nie jest \u017cadne ze zdj\u0119\u0107, kt\u00f3re by\u0142y u\u017cywane w procesie uczenia modelu. Zapisywany jest jedynie plik, kt\u00f3ry zawiera konfiguracj\u0119 ca\u0142ego modelu zapisanego w formacie danego silnika. W tym przypadku jest to TensorFlow, a plik nosi nazw\u0119 <strong>model.pb<\/strong>.<\/p>\n<p>Zawarto\u015b\u0107 pliku Dockerfile<\/p>\n<pre class=\"\" lang=\"DOCKER\">FROM python:3.5\r\n\r\nADD app \/app\r\n\r\nRUN pip install --upgrade pip\r\nRUN pip install -r \/app\/requirements.txt\r\n\r\n# Expose the port\r\nEXPOSE 80\r\n\r\n# Set the working directory\r\nWORKDIR \/app\r\n\r\n# Run the flask server for the endpoints\r\nCMD python app.py\r\n<\/pre>\n<p>Najwa\u017cniejsze pliki znajduj\u0105 si\u0119 w katalogu app<\/p>\n<p><strong>app.py<\/strong> &#8211; g\u0142\u00f3wny kod aplikacji<\/p>\n<p><strong>labels.txt<\/strong> &#8211; lista mo\u017cliwych oznacze\u0144 dla zdj\u0119cia<\/p>\n<p>cat<br \/>\ndog<br \/>\nhorse<\/p>\n<p><strong>model.pb<\/strong> &#8211;\u00a0 zapisane parametry wytrenowanego modelu w TensorFlow<br \/>\n<strong>predict.py<\/strong> &#8211; kod w Pythonie obs\u0142uguj\u0105cy model uczenia maszynowego<\/p>\n<p><strong>requirements.txt<\/strong> &#8211; lista modu\u0142\u00f3w, kt\u00f3re s\u0105 potrzebne do dzia\u0142ania aplikacji<\/p>\n<p>tensorflow==1.5.0<br \/>\npillow==5.0.0<br \/>\nnumpy==1.14.1<br \/>\nflask==0.12.3<\/p>\n<p>Ca\u0142o\u015b\u0107 aplikacji umie\u015bci\u0142em\u00a0 na moim koncie na Githubie.<\/p>\n<p>Ciekawostk\u0105 jest to, \u017ce po dodaniu projektu do repozytorium pojawia si\u0119 informacja o potencjalnym problemie z bezpiecze\u0144stwem takiej aplikacji:<\/p>\n<p><strong class=\"m_-6503661103932404959d-block m_-6503661103932404959mb-1\">djkormo,<\/strong><\/p>\n<p>We found a potential security vulnerability in a repository for which you have been granted security alert access.<\/p>\n<table width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"m_-6503661103932404959v-align-middle\" valign=\"middle !important\" width=\"28\"><img decoding=\"async\" loading=\"lazy\" class=\"m_-6503661103932404959rounded-1 m_-6503661103932404959d-inline-block CToWUd\" src=\"https:\/\/ci5.googleusercontent.com\/proxy\/2MRFoadMAJmH_BfL0q5JnyTmagbAiWKOQDTpWD78RASEe-3zlwJLBJ3coAFsEmeeFHAgEWqvZFuvGCo-ERob6yE0PeVhuE88-X_kBac=s0-d-e1-ft#https:\/\/avatars3.githubusercontent.com\/u\/20195705?s=56&amp;v=4\" alt=\"@djkormo\" width=\"28\" height=\"28\" \/><\/td>\n<td class=\"m_-6503661103932404959v-align-middle m_-6503661103932404959px-2 m_-6503661103932404959lh-condensed\" valign=\"middle !important\"><a class=\"m_-6503661103932404959h5 m_-6503661103932404959mb-0\" href=\"https:\/\/github.com\/djkormo\/ContainersSamples\" target=\"_blank\" rel=\"noopener noreferrer\" data-saferedirecturl=\"https:\/\/www.google.com\/url?q=https:\/\/github.com\/djkormo\/ContainersSamples&amp;source=gmail&amp;ust=1550489088292000&amp;usg=AFQjCNGAACYUyPhAEOJVChntTpkrThCkdA\"> djkormo\/ContainersSamples <\/a><\/td>\n<\/tr>\n<tr>\n<td class=\"m_-6503661103932404959v-align-middle m_-6503661103932404959pt-1\" colspan=\"2\" valign=\"middle !important\">\n<table width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td valign=\"top\">Known <strong> moderate severity<\/strong> security vulnerability detected in <code class=\"m_-6503661103932404959text-bold m_-6503661103932404959no-wrap\">flask &lt; 0.12.3<\/code> defined in <a href=\"https:\/\/github.com\/djkormo\/ContainersSamples\/blob\/master\/Docker\/customvision-ai-sample\/app\/requirements.txt\" target=\"_blank\" rel=\"noopener noreferrer\" data-saferedirecturl=\"https:\/\/www.google.com\/url?q=https:\/\/github.com\/djkormo\/ContainersSamples\/blob\/master\/Docker\/customvision-ai-sample\/app\/requirements.txt&amp;source=gmail&amp;ust=1550489088292000&amp;usg=AFQjCNGVXkH0zC_Mlm-BP4dp84ct2XENow\"><code class=\"m_-6503661103932404959text-bold m_-6503661103932404959no-wrap\">requirements.txt<\/code><\/a>.<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\"><a href=\"https:\/\/github.com\/djkormo\/ContainersSamples\/blob\/master\/Docker\/customvision-ai-sample\/app\/requirements.txt\" target=\"_blank\" rel=\"noopener noreferrer\" data-saferedirecturl=\"https:\/\/www.google.com\/url?q=https:\/\/github.com\/djkormo\/ContainersSamples\/blob\/master\/Docker\/customvision-ai-sample\/app\/requirements.txt&amp;source=gmail&amp;ust=1550489088292000&amp;usg=AFQjCNGVXkH0zC_Mlm-BP4dp84ct2XENow\"><code class=\"m_-6503661103932404959text-bold m_-6503661103932404959no-wrap\">requirements.txt<\/code><\/a> update suggested: <code class=\"m_-6503661103932404959text-bold m_-6503661103932404959no-wrap\">flask ~&gt; 0.12.3<\/code>.<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">Always verify the validity and compatibility of suggestions with your codebase.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>Trudno, jedna us\u0142uga Microsoftu generuje kod, a druga us\u0142uga Microsoftu uznaje go za niebezpieczny. <strong>Prawdziwa moc synergii<\/strong>.<\/p>\n<p>Po poprawieniu kodu zgodnie z sugesti\u0105, komunikat znika.<\/p>\n<p>Przyk\u0142adowy kod umie\u015bci\u0142em w repozytorium githuba.<\/p>\n<p><a href=\"https:\/\/github.com\/djkormo\/ContainersSamples\/tree\/master\/Docker\/customvision-ai-cat-dog-horse-sample\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/github.com\/djkormo\/ContainersSamples\/tree\/master\/Docker\/customvision-ai-cat-dog-horse-sample<\/a><\/p>\n<p>Spr\u00f3bujmy zbudowa\u0107 z gotowego projektu REST API, kt\u00f3re po za\u0142adowaniu na wej\u015bciu dowolnego zdj\u0119cia, b\u0119dzie w stanie odpowiedzie\u0107 na pytanie, czy znajduje si\u0119 na nim jedno z trzech gatunk\u00f3w zwierz\u0105t.<\/p>\n<p>Wykorzystam do tego darmow\u0105 piaskownic\u0119<\/p>\n<p>https:\/\/labs.play-with-docker.com\/<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-899\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/03\/play_with_docker_login1.png\" alt=\"\" width=\"693\" height=\"509\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/03\/play_with_docker_login1.png 693w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/03\/play_with_docker_login1-300x220.png 300w\" sizes=\"(max-width: 693px) 100vw, 693px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Serwis wymaga za\u0142o\u017cenia konta\u00a0 w publicznym repozytorium DockerHuba.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-900\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/03\/play_with_docker_login2.png\" alt=\"\" width=\"435\" height=\"407\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/03\/play_with_docker_login2.png 435w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/03\/play_with_docker_login2-300x281.png 300w\" sizes=\"(max-width: 435px) 100vw, 435px\" \/><\/p>\n<p>Po podaniu naszych po\u015bwiadcze\u0144 pojawia si\u0119 przycisk start<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-901\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/03\/play_with_docker_login3.png\" alt=\"\" width=\"679\" height=\"507\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/03\/play_with_docker_login3.png 679w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/03\/play_with_docker_login3-300x224.png 300w\" sizes=\"(max-width: 679px) 100vw, 679px\" \/><\/p>\n<p>Piaskownica wy\u0142\u0105czy si\u0119 sama po czterech godzinach. Pami\u0119tajmy, aby nie trzyma\u0107 tam poufnych i wra\u017cliwych danych.<\/p>\n<p>Naciskamy przycisk +Add New Instance i uruchamiany nasz wirtualny kontener.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-902\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/03\/play_with_docker_new_instance1.png\" alt=\"\" width=\"1589\" height=\"749\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/03\/play_with_docker_new_instance1.png 1589w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/03\/play_with_docker_new_instance1-300x141.png 300w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/03\/play_with_docker_new_instance1-768x362.png 768w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/03\/play_with_docker_new_instance1-1024x483.png 1024w\" sizes=\"(max-width: 1589px) 100vw, 1589px\" \/><\/p>\n<p>Na pocz\u0105tek klonujemy repozytorium z githuba<\/p>\n<pre lang=\"BASH\">git clone https:\/\/github.com\/djkormo\/ContainersSamples.git\r\n<\/pre>\n<p>Operacja wklejania to skr\u00f3t klawiszowy Shift+Insert<br \/>\nOperacja kopiowania to skr\u00f3t klawiszowy Control+Insert<\/p>\n<p>Wchodzimy do odpowiedniego podkatalogu. To repozytorium zawiera te\u017c inne aplikacje.<\/p>\n<pre lang=\"BASH\">cd ContainersSamples\/Docker\/customvision-ai-cat-dog-horse-sample\/\r\n<\/pre>\n<p>Zawarto\u015b\u0107 wn\u0119trza tego katalogu<\/p>\n<pre>total 8\r\ndrwxr-xr-x    5 root     root            81 Mar  1 22:03 .\r\ndrwxr-xr-x    9 root     root           210 Mar  1 22:03 ..\r\n-rw-r--r--    1 root     root           235 Mar  1 22:03 Dockerfile\r\n-rw-r--r--    1 root     root          3056 Mar  1 22:03 README.md\r\ndrwxr-xr-x    2 root     root            96 Mar  1 22:03 app\r\ndrwxr-xr-x    2 root     root            40 Mar  1 22:03 azureml\r\ndrwxr-xr-x    2 root     root           106 Mar  1 22:03 images\r\n<\/pre>\n<p>Rozpoczynamy proces budowy kontenera.<\/p>\n<pre lang=\"BASH\">docker build -t customvision-ai:v1 .\r\n<\/pre>\n<pre>Sending build context to Docker daemon  3.678MB\r\nStep 1\/7 : FROM python:3.5\r\n3.5: Pulling from library\/python\r\n741437d97401: Pull complete\r\n..\r\nDigest: sha256:8948474618d373b9b32f991eb325329c54ecb853428a78e80a17842ca81e4b2e\r\nStatus: Downloaded newer image for python:3.5\r\n ---&gt; 32184312b88b\r\nStep 2\/7 : ADD app \/app\r\n ---&gt; 7c6d89055605\r\nStep 3\/7 : RUN pip install --upgrade pip\r\n ---&gt; Running in 9fd2ee3b58dc\r\nRequirement already up-to-date: pip in \/usr\/local\/lib\/python3.5\/site-packages (19.0.3)\r\nRemoving intermediate container 9fd2ee3b58dc\r\n ---&gt; 150506540dc1\r\nStep 4\/7 : RUN pip install -r \/app\/requirements.txt\r\n ---&gt; Running in cc633836f593\r\n..\r\nStep 5\/7 : EXPOSE 80\r\n ---&gt; Running in d6a70d77796f\r\nRemoving intermediate container d6a70d77796f\r\n ---&gt; 55299a9bb2ef\r\nStep 6\/7 : WORKDIR \/app\r\n ---&gt; Running in d3d4a17ed762\r\nRemoving intermediate container d3d4a17ed762\r\n ---&gt; a15cf9bbc7f0\r\nStep 7\/7 : CMD python app.py\r\n ---&gt; Running in e0be9f571707\r\nRemoving intermediate container e0be9f571707\r\n ---&gt; f9d7b0a94eac\r\nSuccessfully built f9d7b0a94eac\r\nSuccessfully tagged customvision-ai:v1\r\n<\/pre>\n<p>Po kr\u00f3tkiej chwili nast\u0119puje zbudowanie obrazu aplikacji.<\/p>\n<p>Konfiguracja tego procesu jest zapisana w pliku <strong>Dockerfile<\/strong>.<\/p>\n<p>Kr\u00f3tki opis dla os\u00f3b, kt\u00f3re nigdy nie korzysta\u0142y z technologii konteneryzacji.<\/p>\n<p>Najpierw pobierany jest z repozytorium DockerHub obraz bazowy python:3.5.<\/p>\n<p><strong>FROM python:3.5<\/strong><\/p>\n<p>Dodawana jest zawarto\u015b\u0107 katalogu app z hosta do katalogu app kontenera<\/p>\n<p><strong>ADD app \/app<\/strong><\/p>\n<p>Instalowana jest aktualizacja oprogramowania do kontroli pakiet\u00f3w w Pythonie.<\/p>\n<p><strong>RUN pip install &#8211;upgrade pip<\/strong><\/p>\n<p>Instalowane s\u0105 pakiety do Pythona zawarte w pliku\u00a0 requirements.txt.<\/p>\n<p><strong>RUN pip install -r \/app\/requirements.txt<\/strong><\/p>\n<p>Port 80 zostaje udost\u0119pniony z kontenera do hosta.<\/p>\n<p><strong>EXPOSE 80<\/strong><\/p>\n<p>Ustalany jest katalog roboczy aplikacji w kontenerze.<\/p>\n<p><strong>WORKDIR \/app<\/strong><\/p>\n<p>Uruchamiane jest polecenie, dzi\u0119ki kt\u00f3remu\u00a0 powstaje serwer www na udost\u0119pnionym wcze\u015bniej porcie 80.<\/p>\n<p><strong>CMD python app.py<\/strong><\/p>\n<p>Po zbudowaniu obrazu mo\u017cemy uruchomi\u0107 aplikacj\u0119<\/p>\n<pre class=\"\" lang=\"BASH\">docker run -p 127.0.0.1:33000:80 -d customvision-ai:v1\r\n<\/pre>\n<p>Podczas uruchamiania aplikacji wskazujemy jej nazw\u0119 <strong>customvision-ai:v1<\/strong>, mapowaniu portu kontenera (80) na port hosta (33000), flaga -d oznacza od\u0142\u0105czenie si\u0119 od kontenera. B\u0119dzie on uruchomiony niejako w tle.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-903\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/03\/play_with_docker_run_docker1.png\" alt=\"\" width=\"1245\" height=\"739\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/03\/play_with_docker_run_docker1.png 1245w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/03\/play_with_docker_run_docker1-300x178.png 300w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/03\/play_with_docker_run_docker1-768x456.png 768w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/03\/play_with_docker_run_docker1-1024x608.png 1024w\" sizes=\"(max-width: 1245px) 100vw, 1245px\" \/><\/p>\n<p>Nad oknem terminala pojawia si\u0119 port, kt\u00f3ry zosta\u0142 wystawiony po uruchomieniu aplikacji w kontenerze. W naszym przypadku jest to port <strong>33000<\/strong>.<\/p>\n<p>Po uruchomieniu aplikacji mo\u017cemy sprawdzi\u0107, czy us\u0142uga dzia\u0142a. Pami\u0119tamy, \u017ce aplikacja ma pobra\u0107 zdj\u0119cie i okre\u015bli\u0107, czy jest na nim pies, kot czy ko\u0144.<\/p>\n<p>W katalogu <strong>images<\/strong> umie\u015bci\u0142em sze\u015b\u0107 zdj\u0119\u0107. \u017badne z nich nie by\u0142o wykorzystywane podczas trenowania modelu.<\/p>\n<pre lang=\"BASH\">drwxr-xr-x    2 root     root           106 Mar  1 22:03 .\r\ndrwxr-xr-x    5 root     root            81 Mar  1 22:03 ..\r\n-rw-r--r--    1 root     root         82699 Mar  1 22:03 cat1.jpg\r\n-rw-r--r--    1 root     root         40681 Mar  1 22:03 cat2.jpg\r\n-rw-r--r--    1 root     root         73431 Mar  1 22:03 dog1.jpg\r\n-rw-r--r--    1 root     root        394182 Mar  1 22:03 dog2.jpg\r\n-rw-r--r--    1 root     root         31258 Mar  1 22:03 horse1.jpg\r\n-rw-r--r--    1 root     root        104551 Mar  1 22:03 horse2.jpg\r\n<\/pre>\n<p>Do testowania modelu wykorzysta\u0142em polecenie <strong>curl<\/strong>. Aplikacja wystawia punkt ko\u0144cowy (endpoint) pod adresem http:\/\/127.0.0.1:33000\/image. Wykorzystywany jest\u00a0 POST.<\/p>\n<pre class=\"\" lang=\"BASH\">1. \r\n\r\ncurl -X POST http:\/\/127.0.0.1:33000\/image -F imageData=@images\/cat1.jpg\r\n\r\n{ \"created\": \"2019-03-01T23:50:13.088601\", \"id\": \"\", \"iteration\": \"\", \"predictions\": [ { \"boundingBox\": null, \"probability\": 1.0, \"tagId\": \"\", \"tagName\": \"cat\" } ], \"project\": \"\" }\r\n\r\n2.\r\ncurl -X POST http:\/\/127.0.0.1:33000\/image -F imageData=@images\/cat2.jpg\r\n\r\n{ \"created\": \"2019-03-01T22:50:35.186215\", \"id\": \"\", \"iteration\": \"\", \"predictions\": [ { \"boundingBox\": null, \"probability\": 1.0, \"tagId\": \"\", \"tagName\": \"cat\" } ], \"project\": \"\" }\r\n\r\n3.\r\n\r\ncurl -X POST http:\/\/127.0.0.1:33000\/image -F imageData=@images\/dog1.jpg\r\n\r\n{ \"created\": \"2019-03-01T23:50:56.874340\", \"id\": \"\", \"iteration\": \"\", \"predictions\": [ { \"boundingBox\": null, \"probability\": 1.0, \"tagId\": \"\", \"tagName\": \"dog\" } ], \"project\": \"\" }\r\n\r\n4. \r\n\r\ncurl -X POST http:\/\/127.0.0.1:33000\/image -F imageData=@images\/dog2.jpg\r\n\r\n{ \"created\": \"2019-03-01T22:51:21.509273\", \"id\": \"\", \"iteration\": \"\", \"predictions\": [ { \"boundingBox\": null, \"probability\": 1.0, \"tagId\": \"\", \"tagName\": \"dog\" } ], \"project\": \"\" }\r\n\r\n5.\r\n\r\ncurl -X POST http:\/\/127.0.0.1:33000\/image -F imageData=@images\/horse1.jpg\r\n\r\n{ \"created\": \"2019-03-01T22:49:21.158930\", \"id\": \"\", \"iteration\": \"\", \"predictions\": [ { \"boundingBox\": null, \"probability\": 1.0, \"tagId\": \"\", \"tagName\": \"dog\" } ], \"project\": \"\" }\r\n\r\n6.\r\n\r\ncurl -X POST http:\/\/127.0.0.1:33000\/image -F imageData=@images\/horse2.jpg\r\n\r\n{ \"created\": \"2019-03-01T22:48:06.126164\", \"id\": \"\", \"iteration\": \"\", \"predictions\": [ { \"boundingBox\": null, \"probability\": 0.0015334499767050147, \"tagId\": \"\", \"tagName\": \"dog\" }, { \"boundingBox\": null, \"probability\": 0.9984666109085083, \"tagId\": \"\", \"tagName\": \"horse\" } ], \"project\": \"\" }\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Bystre oko zauwa\u017cy, \u017ce\u00a0 jeden z koni zosta\u0142 sklasyfikowany z prawdopodobie\u0144stwem 100% jako pies.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-904\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/03\/horse1.jpg\" alt=\"\" width=\"480\" height=\"300\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/03\/horse1.jpg 480w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/03\/horse1-300x188.jpg 300w\" sizes=\"(max-width: 480px) 100vw, 480px\" \/><\/p>\n<p>Literatura:<\/p>\n<p><a href=\"https:\/\/pl.wikipedia.org\/wiki\/Tablica_pomy%C5%82ek\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/pl.wikipedia.org\/wiki\/Tablica_pomy%C5%82ek<\/a><\/p>\n<p><a href=\"https:\/\/github.com\/djkormo\/ContainersSamples\/tree\/master\/Docker\/customvision-ai-cat-dog-horse-sample\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/github.com\/djkormo\/ContainersSamples\/tree\/master\/Docker\/customvision-ai-cat-dog-horse-sample<\/a><\/p>\n<p>Ma\u0142a aktualizacja,\u00a0 wygl\u0105da na to \u017ce serwis b\u0119dzie wkr\u00f3tce zamkni\u0119ty. Kolejna cz\u0119\u015b\u0107 o tematyce ML w przygotowaniu<\/p>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-926\" src=\"http:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/03\/customVision_end.png\" alt=\"\" width=\"744\" height=\"644\" srcset=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/03\/customVision_end.png 744w, https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/03\/customVision_end-300x260.png 300w\" sizes=\"(max-width: 744px) 100vw, 744px\" \/><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jeden z pierwszych\u00a0 moich wpis\u00f3w na blogu dotyczy\u0142\u00a0 uczenia maszynowego wed\u0142ug wujka Google. Od tego czasu pojawi\u0142y si\u0119 nowe us\u0142ugi , kt\u00f3re znacznie u\u0142atwiaj\u0105 rozpocz\u0119cie pracy z modelami uczenia maszynowego. Postanowi\u0142em przybli\u017cy\u0107 jedn\u0105 z us\u0142ug Microsoftu, kt\u00f3r\u0105 mo\u017cna przetestowa\u0107 za &hellip; <a href=\"https:\/\/wchmurze.cloud\/index.php\/2019\/03\/01\/uczenia-maszynowe-dla-ubogich-od-trenowania-modelu-do-dedykowanej-uslugi\/\">Continued<\/a><\/p>\n","protected":false},"author":1,"featured_media":1068,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[23,3,6],"tags":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.13 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Uczenia maszynowe dla ubogich. Od trenowania modelu do dedykowanej us\u0142ugi. Cz\u0119\u015b\u0107 1 - 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\/03\/01\/uczenia-maszynowe-dla-ubogich-od-trenowania-modelu-do-dedykowanej-uslugi\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Uczenia maszynowe dla ubogich. Od trenowania modelu do dedykowanej us\u0142ugi. Cz\u0119\u015b\u0107 1 - W chmurze o chmurze i nie tylko\" \/>\n<meta property=\"og:description\" content=\"Jeden z pierwszych\u00a0 moich wpis\u00f3w na blogu dotyczy\u0142\u00a0 uczenia maszynowego wed\u0142ug wujka Google. Od tego czasu pojawi\u0142y si\u0119 nowe us\u0142ugi , kt\u00f3re znacznie u\u0142atwiaj\u0105 rozpocz\u0119cie pracy z modelami uczenia maszynowego. Postanowi\u0142em przybli\u017cy\u0107 jedn\u0105 z us\u0142ug Microsoftu, kt\u00f3r\u0105 mo\u017cna przetestowa\u0107 za &hellip; Continued\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wchmurze.cloud\/index.php\/2019\/03\/01\/uczenia-maszynowe-dla-ubogich-od-trenowania-modelu-do-dedykowanej-uslugi\/\" \/>\n<meta property=\"og:site_name\" content=\"W chmurze o chmurze i nie tylko\" \/>\n<meta property=\"article:published_time\" content=\"2019-03-01T22:52:37+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-08-18T12:41:44+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/03\/machine_learning.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"738\" \/>\n\t<meta property=\"og:image:height\" content=\"415\" \/>\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=\"9 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\/03\/01\/uczenia-maszynowe-dla-ubogich-od-trenowania-modelu-do-dedykowanej-uslugi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/wchmurze.cloud\/index.php\/2019\/03\/01\/uczenia-maszynowe-dla-ubogich-od-trenowania-modelu-do-dedykowanej-uslugi\/\"},\"author\":{\"name\":\"djkormo\",\"@id\":\"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323\"},\"headline\":\"Uczenia maszynowe dla ubogich. Od trenowania modelu do dedykowanej us\u0142ugi. Cz\u0119\u015b\u0107 1\",\"datePublished\":\"2019-03-01T22:52:37+00:00\",\"dateModified\":\"2019-08-18T12:41:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/wchmurze.cloud\/index.php\/2019\/03\/01\/uczenia-maszynowe-dla-ubogich-od-trenowania-modelu-do-dedykowanej-uslugi\/\"},\"wordCount\":1245,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323\"},\"articleSection\":[\"konteneryzacja\",\"Machine Learning\",\"Python\"],\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/wchmurze.cloud\/index.php\/2019\/03\/01\/uczenia-maszynowe-dla-ubogich-od-trenowania-modelu-do-dedykowanej-uslugi\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/wchmurze.cloud\/index.php\/2019\/03\/01\/uczenia-maszynowe-dla-ubogich-od-trenowania-modelu-do-dedykowanej-uslugi\/\",\"url\":\"https:\/\/wchmurze.cloud\/index.php\/2019\/03\/01\/uczenia-maszynowe-dla-ubogich-od-trenowania-modelu-do-dedykowanej-uslugi\/\",\"name\":\"Uczenia maszynowe dla ubogich. Od trenowania modelu do dedykowanej us\u0142ugi. Cz\u0119\u015b\u0107 1 - W chmurze o chmurze i nie tylko\",\"isPartOf\":{\"@id\":\"https:\/\/wchmurze.cloud\/#website\"},\"datePublished\":\"2019-03-01T22:52:37+00:00\",\"dateModified\":\"2019-08-18T12:41:44+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/wchmurze.cloud\/index.php\/2019\/03\/01\/uczenia-maszynowe-dla-ubogich-od-trenowania-modelu-do-dedykowanej-uslugi\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/wchmurze.cloud\/index.php\/2019\/03\/01\/uczenia-maszynowe-dla-ubogich-od-trenowania-modelu-do-dedykowanej-uslugi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/wchmurze.cloud\/index.php\/2019\/03\/01\/uczenia-maszynowe-dla-ubogich-od-trenowania-modelu-do-dedykowanej-uslugi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/wchmurze.cloud\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Uczenia maszynowe dla ubogich. Od trenowania modelu do dedykowanej us\u0142ugi. Cz\u0119\u015b\u0107 1\"}]},{\"@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":"Uczenia maszynowe dla ubogich. Od trenowania modelu do dedykowanej us\u0142ugi. Cz\u0119\u015b\u0107 1 - 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\/03\/01\/uczenia-maszynowe-dla-ubogich-od-trenowania-modelu-do-dedykowanej-uslugi\/","og_locale":"pl_PL","og_type":"article","og_title":"Uczenia maszynowe dla ubogich. Od trenowania modelu do dedykowanej us\u0142ugi. Cz\u0119\u015b\u0107 1 - W chmurze o chmurze i nie tylko","og_description":"Jeden z pierwszych\u00a0 moich wpis\u00f3w na blogu dotyczy\u0142\u00a0 uczenia maszynowego wed\u0142ug wujka Google. Od tego czasu pojawi\u0142y si\u0119 nowe us\u0142ugi , kt\u00f3re znacznie u\u0142atwiaj\u0105 rozpocz\u0119cie pracy z modelami uczenia maszynowego. Postanowi\u0142em przybli\u017cy\u0107 jedn\u0105 z us\u0142ug Microsoftu, kt\u00f3r\u0105 mo\u017cna przetestowa\u0107 za &hellip; Continued","og_url":"https:\/\/wchmurze.cloud\/index.php\/2019\/03\/01\/uczenia-maszynowe-dla-ubogich-od-trenowania-modelu-do-dedykowanej-uslugi\/","og_site_name":"W chmurze o chmurze i nie tylko","article_published_time":"2019-03-01T22:52:37+00:00","article_modified_time":"2019-08-18T12:41:44+00:00","og_image":[{"width":738,"height":415,"url":"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2019\/03\/machine_learning.jpeg","type":"image\/jpeg"}],"author":"djkormo","twitter_card":"summary_large_image","twitter_misc":{"Napisane przez":"djkormo","Szacowany czas czytania":"9 minut"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/wchmurze.cloud\/index.php\/2019\/03\/01\/uczenia-maszynowe-dla-ubogich-od-trenowania-modelu-do-dedykowanej-uslugi\/#article","isPartOf":{"@id":"https:\/\/wchmurze.cloud\/index.php\/2019\/03\/01\/uczenia-maszynowe-dla-ubogich-od-trenowania-modelu-do-dedykowanej-uslugi\/"},"author":{"name":"djkormo","@id":"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323"},"headline":"Uczenia maszynowe dla ubogich. Od trenowania modelu do dedykowanej us\u0142ugi. Cz\u0119\u015b\u0107 1","datePublished":"2019-03-01T22:52:37+00:00","dateModified":"2019-08-18T12:41:44+00:00","mainEntityOfPage":{"@id":"https:\/\/wchmurze.cloud\/index.php\/2019\/03\/01\/uczenia-maszynowe-dla-ubogich-od-trenowania-modelu-do-dedykowanej-uslugi\/"},"wordCount":1245,"commentCount":2,"publisher":{"@id":"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323"},"articleSection":["konteneryzacja","Machine Learning","Python"],"inLanguage":"pl-PL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/wchmurze.cloud\/index.php\/2019\/03\/01\/uczenia-maszynowe-dla-ubogich-od-trenowania-modelu-do-dedykowanej-uslugi\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/wchmurze.cloud\/index.php\/2019\/03\/01\/uczenia-maszynowe-dla-ubogich-od-trenowania-modelu-do-dedykowanej-uslugi\/","url":"https:\/\/wchmurze.cloud\/index.php\/2019\/03\/01\/uczenia-maszynowe-dla-ubogich-od-trenowania-modelu-do-dedykowanej-uslugi\/","name":"Uczenia maszynowe dla ubogich. Od trenowania modelu do dedykowanej us\u0142ugi. Cz\u0119\u015b\u0107 1 - W chmurze o chmurze i nie tylko","isPartOf":{"@id":"https:\/\/wchmurze.cloud\/#website"},"datePublished":"2019-03-01T22:52:37+00:00","dateModified":"2019-08-18T12:41:44+00:00","breadcrumb":{"@id":"https:\/\/wchmurze.cloud\/index.php\/2019\/03\/01\/uczenia-maszynowe-dla-ubogich-od-trenowania-modelu-do-dedykowanej-uslugi\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wchmurze.cloud\/index.php\/2019\/03\/01\/uczenia-maszynowe-dla-ubogich-od-trenowania-modelu-do-dedykowanej-uslugi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/wchmurze.cloud\/index.php\/2019\/03\/01\/uczenia-maszynowe-dla-ubogich-od-trenowania-modelu-do-dedykowanej-uslugi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/wchmurze.cloud\/"},{"@type":"ListItem","position":2,"name":"Uczenia maszynowe dla ubogich. Od trenowania modelu do dedykowanej us\u0142ugi. Cz\u0119\u015b\u0107 1"}]},{"@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\/871"}],"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=871"}],"version-history":[{"count":27,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/posts\/871\/revisions"}],"predecessor-version":[{"id":1069,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/posts\/871\/revisions\/1069"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/media\/1068"}],"wp:attachment":[{"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/media?parent=871"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/categories?post=871"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/tags?post=871"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}