Facebook - konwersja
Pobierz fragment

Deep Learning. Praca z językiem Python i biblioteką Keras - ebook

Wydawnictwo:
Tłumacz:
Data wydania:
19 marca 2019
Format ebooka:
PDF
Format PDF
czytaj
na laptopie
czytaj
na tablecie
Format e-booków, który możesz odczytywać na tablecie oraz laptopie. Pliki PDF są odczytywane również przez czytniki i smartfony, jednakze względu na komfort czytania i brak możliwości skalowania czcionki, czytanie plików PDF na tych urządzeniach może być męczące dla oczu. Więcej informacji znajdziesz w dziale Pomoc.
Multiformat
E-booki w Virtualo.pl dostępne są w opcji multiformatu. Oznacza to, że po dokonaniu zakupu, e-book pojawi się na Twoim koncie we wszystkich formatach dostępnych aktualnie dla danego tytułu. Informacja o dostępności poszczególnych formatów znajduje się na karcie produktu.
, EPUB
Format EPUB
czytaj
na czytniku
czytaj
na tablecie
czytaj
na smartfonie
Jeden z najpopularniejszych formatów e-booków na świecie. Niezwykle wygodny i przyjazny czytelnikom - w przeciwieństwie do formatu PDF umożliwia skalowanie czcionki, dzięki czemu możliwe jest dopasowanie jej wielkości do kroju i rozmiarów ekranu. Więcej informacji znajdziesz w dziale Pomoc.
Multiformat
E-booki w Virtualo.pl dostępne są w opcji multiformatu. Oznacza to, że po dokonaniu zakupu, e-book pojawi się na Twoim koncie we wszystkich formatach dostępnych aktualnie dla danego tytułu. Informacja o dostępności poszczególnych formatów znajduje się na karcie produktu.
, MOBI
Format MOBI
czytaj
na czytniku
czytaj
na tablecie
czytaj
na smartfonie
Jeden z najczęściej wybieranych formatów wśród czytelników e-booków. Możesz go odczytać na czytniku Kindle oraz na smartfonach i tabletach po zainstalowaniu specjalnej aplikacji. Więcej informacji znajdziesz w dziale Pomoc.
Multiformat
E-booki w Virtualo.pl dostępne są w opcji multiformatu. Oznacza to, że po dokonaniu zakupu, e-book pojawi się na Twoim koncie we wszystkich formatach dostępnych aktualnie dla danego tytułu. Informacja o dostępności poszczególnych formatów znajduje się na karcie produktu.
(3w1)
Multiformat
E-booki sprzedawane w księgarni Virtualo.pl dostępne są w opcji multiformatu - kupujesz treść, nie format. Po dodaniu e-booka do koszyka i dokonaniu płatności, e-book pojawi się na Twoim koncie w Mojej Bibliotece we wszystkich formatach dostępnych aktualnie dla danego tytułu. Informacja o dostępności poszczególnych formatów znajduje się na karcie produktu przy okładce. Uwaga: audiobooki nie są objęte opcją multiformatu.
czytaj
na laptopie
Pliki PDF zabezpieczone watermarkiem możesz odczytać na dowolnym laptopie po zainstalowaniu czytnika dokumentów PDF. Najpowszechniejszym programem, który umożliwi odczytanie pliku PDF na laptopie, jest Adobe Reader. W zależności od potrzeb, możesz zainstalować również inny program - e-booki PDF pod względem sposobu odczytywania nie różnią niczym od powszechnie stosowanych dokumentów PDF, które odczytujemy każdego dnia.
Informacje na temat zabezpieczenia e-booka znajdziesz na karcie produktu w "Szczegółach na temat e-booka". Więcej informacji znajdziesz w dziale Pomoc.
czytaj
na tablecie
Aby odczytywać e-booki na swoim tablecie musisz zainstalować specjalną aplikację. W zależności od formatu e-booka oraz systemu operacyjnego, który jest zainstalowany na Twoim urządzeniu może to być np. Bluefire dla EPUBa lub aplikacja Kindle dla formatu MOBI.
Informacje na temat zabezpieczenia e-booka znajdziesz na karcie produktu w "Szczegółach na temat e-booka". Więcej informacji znajdziesz w dziale Pomoc.
czytaj
na czytniku
Czytanie na e-czytniku z ekranem e-ink jest bardzo wygodne i nie męczy wzroku. Pliki przystosowane do odczytywania na czytnikach to przede wszystkim EPUB (ten format możesz odczytać m.in. na czytnikach PocketBook) i MOBI (ten fromat możesz odczytać m.in. na czytnikach Kindle).
Informacje na temat zabezpieczenia e-booka znajdziesz na karcie produktu w "Szczegółach na temat e-booka". Więcej informacji znajdziesz w dziale Pomoc.
czytaj
na smartfonie
Aby odczytywać e-booki na swoim smartfonie musisz zainstalować specjalną aplikację. W zależności od formatu e-booka oraz systemu operacyjnego, który jest zainstalowany na Twoim urządzeniu może to być np. iBooks dla EPUBa lub aplikacja Kindle dla formatu MOBI.
Informacje na temat zabezpieczenia e-booka znajdziesz na karcie produktu w "Szczegółach na temat e-booka". Więcej informacji znajdziesz w dziale Pomoc.
Pobierz fragment
79,00

Deep Learning. Praca z językiem Python i biblioteką Keras - ebook

W skrócie uczenie maszynowe polega na wyodrębnianiu informacji z surowych danych i budowie modelu, który służy do przetwarzania kolejnych surowych danych. Technologia ta od kilku lat intensywnie się rozwija, a w miarę wzrostu jej możliwości rosną również zainteresowanie i oczekiwania architektów i użytkowników. Niektórzy widzą w głębokim uczeniu poważne zagrożenie, jednak obietnice, jakie daje ten rodzaj sztucznej inteligencji, są fascynujące. Narzędzia służące do programowania uczenia maszynowego, takie jak zaimplementowana w Pythonie biblioteka Keras, są dostępne dla każdego, kto chce wykorzystać tę technologię do własnych celów.

Niniejsza książka jest praktycznym przewodnikiem po uczeniu głębokim. Znalazły się tu dokładne informacje o istocie uczenia głębokiego, o jego zastosowaniach i ograniczeniach. Wyjaśniono zasady rozwiązywania typowych problemów uczenia maszynowego. Pokazano, jak korzystać z pakietu Keras przy implementacji rozpoznawania obrazu, przetwarzania języka naturalnego, klasyfikacji obrazów, przewidywania danych szeregu czasowego, analizy sentymentu, generowania tekstu i obrazu. Nawet dość skomplikowane zagadnienia, włączając w to koncepcje i dobre praktyki, zostały wyjaśnione w sposób bardzo przystępny i zrozumiały, tak aby umożliwić samodzielne stosowanie technik uczenia głębokiego w kolejnych projektach.

W tej książce między innymi:

  • kontekst i ogólne koncepcje sztucznej inteligencji, uczenia maszynowego i uczenia głębokiego
  • sieci neuronowe i pakiet Keras
  • typowe sposoby pracy nad projektami uczenia głębokiego
  • rozbudowane modele uczenia głębokiego oraz modele generatywne
  • perspektywy i ograniczenia technologii

Uczenie głębokie. Nikt nie zna granic tej technologii!

Spis treści

 

Przedmowa 9

 

Podziękowania 11

O książce 13

O autorze 17

CZĘŚĆ I. PODSTAWY UCZENIA GŁĘBOKIEGO 19

Rozdział 1. Czym jest uczenie głębokie? 21

  • 1.1. Sztuczna inteligencja, uczenie maszynowe i uczenie głębokie 22
    • 1.1.1. Sztuczna inteligencja 22
    • 1.1.2. Uczenie maszynowe 23
    • 1.1.3. Formy danych umożliwiające uczenie 24
    • 1.1.4. "Głębia" uczenia głębokiego 26
    • 1.1.5. Działanie uczenia głębokiego przedstawione na trzech rysunkach 28
    • 1.1.6. Co dotychczas osiągnięto za pomocą uczenia głębokiego? 29
    • 1.1.7. Nie wierz w tymczasową popularność 30
    • 1.1.8. Nadzieje na powstanie sztucznej inteligencji 31
  • 1.2. Zanim pojawiło się uczenie głębokie: krótka historia uczenia maszynowego 32
    • 1.2.1. Modelowanie probabilistyczne 33
    • 1.2.2. Wczesne sieci neuronowe 33
    • 1.2.3. Metody jądrowe 33
    • 1.2.4. Drzewa decyzyjne, lasy losowe i gradientowe wzmacnianie maszyn 35
    • 1.2.5. Powrót do sieci neuronowych 36
    • 1.2.6. Co wyróżnia uczenie głębokie? 36
    • 1.2.7. Współczesne uczenie maszynowe 37
  • 1.3. Dlaczego uczenie głębokie? Dlaczego teraz? 38
    • 1.3.1. Sprzęt 38
    • 1.3.2. Dane 39
    • 1.3.3. Algorytmy 40
    • 1.3.4. Nowa fala inwestycji 41
    • 1.3.5. Demokratyzacja uczenia głębokiego 41
    • 1.3.6. Co dalej? 42

Rozdział 2. Matematyczne podstawy sieci neuronowych 43

  • 2.1. Pierwszy przykład sieci neuronowej 44
  • 2.2. Reprezentacja danych sieci neuronowych 47
    • 2.2.1. Skalary (tensory zerowymiarowe) 47
    • 2.2.2. Wektory (tensory jednowymiarowe) 48
    • 2.2.3. Macierze (tensory dwuwymiarowe) 48
    • 2.2.4. Trójwymiarowe tensory i tensory o większej liczbie wymiarów 48
    • 2.2.5. Główne atrybuty 49
    • 2.2.6. Obsługa tensorów w bibliotece Numpy 50
    • 2.2.7. Wsad danych 51
    • 2.2.8. Prawdziwe przykłady tensorów danych 51
    • 2.2.9. Dane wektorowe 52
    • 2.2.10. Dane szeregu czasowego i dane sekwencyjne 52
    • 2.2.11. Dane w postaci obrazów 53
    • 2.2.12. Materiały wideo 53
  • 2.3. Koła zębate sieci neuronowych: operacje na tensorach 54
    • 2.3.1. Operacje wykonywane element po elemencie 54
    • 2.3.2. Rzutowanie 55
    • 2.3.3. Iloczyn tensorowy 56
    • 2.3.4. Zmiana kształtu tensora 59
    • 2.3.5. Geometryczna interpretacja operacji tensorowych 59
    • 2.3.6. Interpretacja geometryczna uczenia głębokiego 60
  • 2.4. Silnik sieci neuronowych: optymalizacja gradientowa 61
    • 2.4.1. Czym jest pochodna? 62
    • 2.4.2. Pochodna operacji tensorowej: gradient 63
    • 2.4.3. Stochastyczny spadek wzdłuż gradientu 64
    • 2.4.4. Łączenie pochodnych: algorytm propagacji wstecznej 67
  • 2.5. Ponowna analiza pierwszego przykładu 68

Rozdział 3. Rozpoczynamy korzystanie z sieci neuronowych 71

  • 3.1. Anatomia sieci neuronowej 72
    • 3.1.1. Warstwy: podstawowe bloki konstrukcyjne uczenia głębokiego 72
    • 3.1.2. Modele: sieci warstw 74
    • 3.1.3. Funkcja straty i optymalizatory: najważniejsze elementy konfiguracji procesu uczenia 74
  • 3.2. Wprowadzenie do pakietu Keras 75
    • 3.2.1. Keras, TensorFlow, Theano i CNTK 76
    • 3.2.2. Praca z pakietem Keras: krótkie wprowadzenie 77
  • 3.3. Przygotowanie stacji roboczej do uczenia głębokiego 78
    • 3.3.1. Notatniki Jupyter: najlepszy sposób na eksperymentowanie z uczeniem głębokim 79
    • 3.3.2. Dwie opcje uruchamiania pakietu Keras 79
    • 3.3.3. Wady i zalety uruchamiania uczenia głębokiego w chmurze 80
    • 3.3.4. Jaki procesor graficzny najlepiej nadaje się do uczenia głębokiego? 80
  • 3.4. Przykład klasyfikacji binarnej: klasyfikacja recenzji filmów 81
    • 3.4.1. Zbiór danych IMDB 81
    • 3.4.2. Przygotowywanie danych 82
    • 3.4.3. Budowa sieci neuronowej 83
    • 3.4.4. Walidacja modelu 85
    • 3.4.5. Używanie wytrenowanej sieci do generowania przewidywań dotyczących nowych danych 89
    • 3.4.6. Dalsze eksperymenty 90
    • 3.4.7. Wnioski 90
  • 3.5. Przykład klasyfikacji wieloklasowej: klasyfikacja krótkich artykułów prasowych 90
    • 3.5.1. Zbiór danych Agencji Reutera 91
    • 3.5.2. Przygotowywanie danych 92
    • 3.5.3. Budowanie sieci 93
    • 3.5.4. Walidacja modelu 94
    • 3.5.5. Generowanie przewidywań dotyczących nowych danych 96
    • 3.5.6. Inne sposoby obsługi etykiet i funkcji straty 96
    • 3.5.7. Dlaczego warto tworzyć odpowiednio duże warstwy pośrednie? 97
    • 3.5.8. Dalsze eksperymenty 98
    • 3.5.9. Wnioski 98
  • 3.6. Przykład regresji: przewidywanie cen mieszkań 98
    • 3.6.1. Zbiór cen mieszkań w Bostonie 98
    • 3.6.2. Przygotowywanie danych 99
    • 3.6.3. Budowanie sieci 100
    • 3.6.4. K-składowa walidacja krzyżowa 100
    • 3.6.5. Wnioski 104

Rozdział 4. Podstawy uczenia maszynowego 107

  • 4.1. Cztery rodzaje uczenia maszynowego 108
    • 4.1.1. Uczenie nadzorowane 108
    • 4.1.2. Uczenie nienadzorowane 108
    • 4.1.3. Uczenie częściowo nadzorowane 109
    • 4.1.4. Uczenie przez wzmacnianie 109
  • 4.2. Ocena modeli uczenia maszynowego 109
    • 4.2.1. Zbiory treningowe, walidacyjne i testowe 111
    • 4.2.2. Rzeczy, o których warto pamiętać 114
  • 4.3. Wstępna obróbka danych, przetwarzanie cech i uczenie cech 114
    • 4.3.1. Przygotowywanie danych do przetwarzania przez sieci neuronowe 115
    • 4.3.2. Przetwarzanie cech 116
  • 4.4. Nadmierne dopasowanie i zbyt słabe dopasowanie 118
    • 4.4.1. Redukcja rozmiaru sieci 118
    • 4.4.2. Dodawanie regularyzacji wag 121
    • 4.4.3. Porzucanie - technika dropout 123
  • 4.5. Uniwersalny przepływ roboczy uczenia maszynowego 124
    • 4.5.1. Definiowanie problemu i przygotowywanie zbioru danych 125
    • 4.5.2. Wybór miary sukcesu 126
    • 4.5.3. Określanie techniki oceny wydajności modelu 126
    • 4.5.4. Przygotowywanie danych 127
    • 4.5.5. Tworzenie modeli lepszych od linii bazowej 127
    • 4.5.6. Skalowanie w górę: tworzenie modelu, który ulega nadmiernemu dopasowaniu 128
    • 4.5.7. Regularyzacja modelu i dostrajanie jego hiperparametrów 129

CZĘŚĆ II. UCZENIE GŁĘBOKIE W PRAKTYCE 131

Rozdział 5. Uczenie głębokie i przetwarzanie obrazu 133

  • 5.1. Wprowadzenie do konwolucyjnych sieci neuronowych 134
    • 5.1.1. Działanie sieci konwolucyjnej 136
    • 5.1.2. Operacja max-pooling 141
  • 5.2. Trenowanie konwolucyjnej sieci neuronowej na małym zbiorze danych 143
    • 5.2.1. Stosowanie uczenia głębokiego w problemach małych zbiorów danych 143
    • 5.2.2. Pobieranie danych 144
    • 5.2.3. Budowa sieci neuronowej 147
    • 5.2.4. Wstępna obróbka danych 148
    • 5.2.5. Stosowanie techniki augmentacji danych 152
  • 5.3. Korzystanie z wcześniej wytrenowanej konwolucyjnej sieci neuronowej 156
    • 5.3.1. Ekstrakcja cech 157
    • 5.3.2. Dostrajanie 165
    • 5.3.3. Wnioski 171
  • 5.4. Wizualizacja efektów uczenia konwolucyjnych sieci neuronowych 172
    • 5.4.1. Wizualizacja pośrednich aktywacji 172
    • 5.4.2. Wizualizacja filtrów konwolucyjnych sieci neuronowych 179
    • 5.4.3. Wizualizacja map ciepła aktywacji klas 184

Rozdział 6. Uczenie głębokie w przetwarzaniu tekstu i sekwencji 189

  • 6.1. Praca z danymi tekstowymi 190
    • 6.1.1. Kodowanie słów i znaków metodą gorącej jedynki 191
    • 6.1.2. Osadzanie słów 194
    • 6.1.3. Łączenie wszystkich technik: od surowego tekstu do osadzenia słów 198
    • 6.1.4. Wnioski 205
  • 6.2. Rekurencyjne sieci neuronowe 205
    • 6.2.1. Warstwa rekurencyjna w pakiecie Keras 208
    • 6.2.2. Warstwy LSTM i GRU 211
    • 6.2.3. Przykład warstwy LSTM zaimplementowanej w pakiecie Keras 214
    • 6.2.4. Wnioski 216
  • 6.3. Zaawansowane zastosowania rekurencyjnych sieci neuronowych 216
    • 6.3.1. Problem prognozowania temperatury 217
    • 6.3.2. Przygotowywanie danych 219
    • 6.3.3. Punkt odniesienia w postaci zdrowego rozsądku 222
    • 6.3.4. Podstawowe rozwiązanie problemu przy użyciu techniki uczenia maszynowego 223
    • 6.3.5. Punkt odniesienia w postaci pierwszego modelu rekurencyjnego 224
    • 6.3.6. Stosowanie rekurencyjnego porzucania w celu zmniejszenia nadmiernego dopasowania 225
    • 6.3.7. Tworzenie stosów warstw rekurencyjnych 227
    • 6.3.8. Korzystanie z dwukierunkowych rekurencyjnych sieci neuronowych 228
    • 6.3.9. Kolejne rozwiązania 232
    • 6.3.10. Wnioski 233
  • 6.4. Konwolucyjne sieci neuronowe i przetwarzanie sekwencji 234
    • 6.4.1. Przetwarzanie sekwencji za pomocą jednowymiarowej sieci konwolucyjnej 234
    • 6.4.2. Jednowymiarowe łączenie danych sekwencyjnych 235
    • 6.4.3. Implementacja jednowymiarowej sieci konwolucyjnej 235
    • 6.4.4. Łączenie sieci konwolucyjnych i rekurencyjnych w celu przetworzenia długich sekwencji 238
    • 6.4.5. Wnioski 241

Rozdział 7. Zaawansowane najlepsze praktyki uczenia głębokiego 243

  • 7.1. Funkcjonalny interfejs programistyczny pakietu Keras: wykraczanie poza model sekwencyjny 244
    • 7.1.1. Wprowadzenie do funkcjonalnego interfejsu API 246
    • 7.1.2. Modele z wieloma wejściami 248
    • 7.1.3. Modele z wieloma wyjściami 250
    • 7.1.4. Skierowane acykliczne grafy warstw 252
    • 7.1.5. Udostępnianie wag warstwy 255
    • 7.1.6. Modele pełniące funkcję warstw 257
    • 7.1.7. Wnioski 257
  • 7.2. Monitorowanie modeli uczenia głębokiego przy użyciu wywołań zwrotnych pakietu Keras i narzędzia TensorBoard 258
    • 7.2.1. Używanie wywołań zwrotnych w celu sterowania procesem trenowania modelu 258
    • 7.2.2. Wprowadzenie do TensorBoard - platformy wizualizacji danych pakietu TensorFlow 261
    • 7.2.3. Wnioski 267
  • 7.3. Korzystanie z pełni możliwości modeli 267
    • 7.3.1. Konstrukcja zaawansowanych architektur 267
    • 7.3.2. Optymalizacja hiperparametru 271
    • 7.3.3. Składanie modeli 272
    • 7.3.4. Wnioski 274

Rozdział 8. Stosowanie uczenia głębokiego w celu generowania danych 277

  • 8.1. Generowanie tekstu za pomocą sieci LSTM 279
    • 8.1.1. Krótka historia generatywnych sieci rekurencyjnych 279
    • 8.1.2. Generowanie danych sekwencyjnych 280
    • 8.1.3. Dlaczego strategia próbkowania jest ważna? 281
    • 8.1.4. Implementacja algorytmu LSTM generującego tekst na poziomie liter 282
    • 8.1.5. Wnioski 287
  • 8.2. DeepDream 287
    • 8.2.1. Implementacja algorytmu DeepDream w pakiecie Keras 289
    • 8.2.2. Wnioski 293
  • 8.3. Neuronowy transfer stylu 295
    • 8.3.1. Strata treści 296
    • 8.3.2. Strata stylu 296
    • 8.3.3. Implementacja neuronowego transferu stylu przy użyciu pakietu Keras 297
    • 8.3.4. Wnioski 302
  • 8.4. Generowanie obrazów przy użyciu wariacyjnych autoenkoderów 302
    • 8.4.1. Próbkowanie z niejawnej przestrzeni obrazów 304
    • 8.4.2. Wektory koncepcyjne używane podczas edycji obrazu 305
    • 8.4.3. Wariacyjne autoenkodery 306
    • 8.4.4. Wnioski 311
  • 8.5. Wprowadzenie do generatywnych sieci z przeciwnikiem 312
    • 8.5.1. Schematyczna implementacja sieci GAN 313
    • 8.5.2. Zbiór przydatnych rozwiązań 314
    • 8.5.3. Generator 315
    • 8.5.4. Dyskryminator 316
    • 8.5.5. Sieć z przeciwnikiem 317
    • 8.5.6. Trenowanie sieci DCGAN 317
    • 8.5.7. Wnioski 319

Rozdział 9. Wnioski 321

  • 9.1. Przypomnienie najważniejszych koncepcji 322
    • 9.1.1. Sztuczna inteligencja 322
    • 9.1.2. Co sprawia, że uczenie głębokie to wyjątkowa dziedzina uczenia maszynowego? 322
    • 9.1.3. Jak należy traktować uczenie głębokie? 323
    • 9.1.4. Najważniejsze technologie 324
    • 9.1.5. Uniwersalny przepływ roboczy uczenia maszynowego 325
    • 9.1.6. Najważniejsze architektury sieci 326
    • 9.1.7. Przestrzeń możliwości 330
  • 9.2. Ograniczenia uczenia głębokiego 332
    • 9.2.1. Ryzyko antropomorfizacji modeli uczenia maszynowego 332
    • 9.2.2. Lokalne uogólnianie a ekstremalne uogólnianie 334
    • 9.2.3. Wnioski 335
  • 9.3. Przyszłość uczenia głębokiego 336
    • 9.3.1. Modele jako programy 337
    • 9.3.2. Wykraczanie poza algorytm propagacji wstecznej i warstwy różniczkowalne 339
    • 9.3.3. Zautomatyzowane uczenie maszynowe 340
    • 9.3.4. Nieustanne uczenie się i wielokrotne używanie modułowych procedur składowych 341
    • 9.3.5. Przewidywania dotyczące dalekiej przyszłości 342
  • 9.4. Bycie na bieżąco z nowościami związanymi z szybko rozwijającą się dziedziną 343
    • 9.4.1. Zdobywaj wiedzę praktyczną, pracując z prawdziwymi problemami przedstawianymi w serwisie Kaggle 343
    • 9.4.2. Czytaj o nowych rozwiązaniach w serwisie arXiv 344
    • 9.4.3. Eksploruj ekosystem związany z pakietem Keras 344
  • 9.5. Ostatnie słowa 345

Dodatek A. Instalowanie pakietu Keras i innych bibliotek niezbędnych do jego działania w systemie Ubuntu 347

Dodatek B. Uruchamianie kodu notatników Jupyter przy użyciu zdalnej instancji procesora graficznego EC2 353

Skorowidz 361

Kategoria: Programowanie
Zabezpieczenie: Watermark
Watermark
Watermarkowanie polega na znakowaniu plików wewnątrz treści, dzięki czemu możliwe jest rozpoznanie unikatowej licencji transakcyjnej Użytkownika. E-książki zabezpieczone watermarkiem można odczytywać na wszystkich urządzeniach odtwarzających wybrany format (czytniki, tablety, smartfony). Nie ma również ograniczeń liczby licencji oraz istnieje możliwość swobodnego przenoszenia plików między urządzeniami. Pliki z watermarkiem są kompatybilne z popularnymi programami do odczytywania ebooków, jak np. Calibre oraz aplikacjami na urządzenia mobilne na takie platformy jak iOS oraz Android.
ISBN: 978-83-283-4779-3
Rozmiar pliku: 9,8 MB

BESTSELLERY

Kategorie: