TensorFlow.js - odpowiednik popularnej biblioteki TensorFlow dla języka javascript

in polish •  7 years ago 

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.

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

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ś :)

  ·  7 years ago (edited)

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