Wstęp
Tensorflow to bardzo popularna otwartoźródłowa biblioteka programistyczna, głównie dla języka python, służąca do uczenia maszynowego / uczenia głębokiego. Została stworzona przez zespół Google Brain. Przez długi czas nie było żadnego odpowiednika dla języka javascript, który by dorównywał możliwościami. Zmieniło się to w marcu 2018 roku, kiedy Google zaprezentowało bibliotekę tensorflow.js.
Geneza
Jakiś czas temu Google zaprezentowało stronę: https://playground.tensorflow.org, która umożliwiała eksperymentowanie sieciami neuronowymi z poziomu przeglądarki, bez potrzeby instalacji czegokolwiek. Strona ta cieszyła się bardzo dużą popularnością, ze względu na wartość edukacyjną. Sprawiło to, że Google postanowiło stworzyć bibliotekę deeplearn.js, która umożliwiała łatwe używanie uczenia maszynowego z poziomu języka javascript. Jednak ciągle była to biblioteka o znacznie mniejszych możliwościach niż TensorFlow czy PyTorch. Koniec końców powstał tensorflow.js, czyli odpowiednik TensorFlow dla języka javascript.
Zastosowanie
Do korzyści z używania biblioteki tensorflow.js możemy zaliczyć:
- możliwość uruchomienia całego kodu tylko po stronie klienta, bez potrzeby wysyłania jakichkolwiek danych do serwera
- bardzo niski próg wejścia; nie trzeba niczego instalować
- składnia bardzo podobna do biblioteki tensorflow, więc osoby, które już znają te bibliotekę, będą mogły dość szybko zacząć z niej korzystać
- przydatna dla urządzeń mobilnych, wszystko może się wykonywać na urządzeniu, nie ma potrzeby wysyłania danych gdziekolwiek ani instalacji żadnego środowiska
- możliwość łatwego dzielenia się kodem, który jest gotowy do uruchomienia
Z kolei jako wady możemy wskazać:
- niższa wydajność (jednak z drugiej strony nikt nie będzie uruchamiał zaawansowanych modeli w przeglądarce)
- słabo rozwinięty ekosystem uczenia maszynowego dla języka javascript
Przykłady
Poniżej prosty przykład regresji liniowej. Kod jest osadzony w HTML. Widzimy, że wystarcza jedna linijka <script src="https://cdn.jsdelivr.net/npm/@tensorflow/[email protected]"> </script>
i już możemy korzystać z biblioteki.
<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/[email protected]"> </script>
<script>
const model = tf.sequential();
model.add(tf.layers.dense({units: 1, inputShape: [1]}));
model.compile({loss: 'meanSquaredError', optimizer: 'sgd'});
const shape = [4, 1];
const x = tf.tensor2d([1, 2, 3, 4], shape);
const y = tf.tensor2d([1, 3, 5, 7], shape);
const outputShape = [1, 1];
model.fit(x, y).then(() => {
model.predict(tf.tensor2d([5], outputShape)).print();
});
</script>
</head>
<body>
</body>
</html>
Wynik działania możemy odczytać w konsoli przeglądarki.
Biblioteka może być także używana z poziomu node.js. Wystarczy ją zainstalować poleceniem: npm install @tensorflow/tfjs
. Kod prezentuje się teraz następująco:
import * as tf from '@tensorflow/tfjs';
const model = tf.sequential();
model.add(tf.layers.dense({units: 1, inputShape: [1]}));
model.compile({loss: 'meanSquaredError', optimizer: 'sgd'});
const shape = [4, 1];
const x = tf.tensor2d([1, 2, 3, 4], shape);
const y = tf.tensor2d([1, 3, 5, 7], shape);
const outputShape = [1, 1];
model.fit(x, y).then(() => {
model.predict(tf.tensor2d([5], outputShape)).print();
});
Bardziej zaawansowane przykłady możemy znaleźć na oficjalnym repozytorium projektu:
https://github.com/tensorflow/tfjs-examples
Podsumowanie
Mogłoby się wydawać, że biblioteka tensorflow.js to taka ciekawostka, bo uczenie maszynowe niezbyt kojarzy się z językiem javascript. Ale z drugiej strony to duży krok naprzód, obniżający znacznie próg wejścia i pozwalający na łatwiejsze wykorzystanie dobrodziejstw uczenia maszynowego na stronach internetowych.
Javascript, język, który aktualnie służy do wszystkiego do czego nie został zaprojektowany :D
Od dawna chodzi mi po głowie jakiś projekt związany ze sztucznymi sieciami neuronowymi, czy uczeniem maszynowym. Tzn, nic konkretnego, ale marzy mi się nauka tematu wraz z praktycznym wykorzystaniem od razu :) Może coś ciekawego dla Steemit?
Dzięki za przybliżenie tematu i podrzucenie przykładów, to może spowodować, że jednak wezmę za coś :)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Ja jakiś czas temu myślałem nad klasyfikatorem kont (człowiek vs bot), ale w międzyczasie ktoś bardzo fajnie to zrobił: http://www.steemreports.com/sincerity-accounts-info/?accounts=jacekw%2Cnicniezgrublem%2Ctechnocracy%2Cglodniwiedzy%2Cdiosbot%2Ccheetah co nieco obniżyło mój zapał ;) Ale i tak to w końcu zrobię, po swojemu :D
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit