Co się zmieniło w TensorFlow.js 3.0
Informacje o wydaniu są dostępne tutaj . Kilka godnych uwagi funkcji dostępnych dla użytkownika obejmuje:
Moduły niestandardowe
Zapewniamy wsparcie w tworzeniu niestandardowych modułów tfjs w celu wspierania tworzenia pakietów przeglądarek zoptymalizowanych pod względem rozmiaru. Wysyłaj mniej kodu JavaScript swoim użytkownikom. Aby dowiedzieć się więcej na ten temat, zobacz ten tutorial .
Ta funkcja jest przeznaczona do wdrożenia w przeglądarce, jednak włączenie tej funkcji motywuje niektóre zmiany opisane poniżej.
Kod ES2017
Oprócz niektórych pakietów prekompilowanych, głównym sposobem, w jaki obecnie wysyłamy nasz kod do NPM, są moduły ES ze składnią ES2017 . Dzięki temu programiści mogą korzystać z nowoczesnych funkcji JavaScript i mieć większą kontrolę nad tym, co wysyłają do użytkowników końcowych.
Nasz module
package.json jest punktem wejścia do poszczególnych plików bibliotek w formacie ES2017 (tj. nie pakietu). Umożliwia to potrząsanie drzewami i większą kontrolę dewelopera nad dalszą transpilacją.
Oferujemy kilka alternatywnych formatów w formie wstępnie skompilowanych pakietów, które obsługują starsze przeglądarki i inne systemy modułowe. Są zgodne z konwencją nazewnictwa opisaną w poniższej tabeli i można je załadować z popularnych sieci CDN, takich jak JsDelivr i Unpkg.
Nazwa pliku | Format modułu | Wersja językowa |
tf[-pakiet].[min].js* | UMD | ES5 |
tf[-pakiet].es2017.[min].js | UMD | ES2017 |
tf[-pakiet].node.js** | Wspólny JS | ES5 |
tf[-pakiet].es2017.fesm.[min].js | ESM (pojedynczy plik płaski) | ES2017 |
indeks.js*** | ESM | ES2017 |
* [pakiet] odnosi się do nazw takich jak rdzeń/konwerter/warstwy dla podpakietów głównego pakietu tf.js. [min] opisuje, gdzie poza plikami niezminifikowanymi udostępniamy pliki zminimalizowane.
** Nasz main
plik package.json wskazuje na ten plik.
*** Nasze wejście module
package.json wskazuje na ten plik.
Jeśli używasz tensorflow.js przez npm i używasz programu pakującego, może być konieczne dostosowanie jego konfiguracji, aby upewnić się, że może on zużywać moduły ES2017 lub wskazywać inny wpis w out package.json.
@tensorflow/tfjs-core jest domyślnie cieńszy
Aby umożliwić lepsze potrząsanie drzewami, nie uwzględniamy już domyślnie interfejsu API łączenia/płynności na tensorach w @tensorflow/tfjs-core. Zalecamy bezpośrednie użycie operacji (ops), aby uzyskać najmniejszy pakiet. Zapewniamy import import '@tensorflow/tfjs-core/dist/public/chained_ops/register_all_chained_ops';
który przywraca interfejs API łączenia.
Nie rejestrujemy już także domyślnie gradientów dla jąder. Jeśli potrzebujesz obsługi gradientów/treningu, możesz import '@tensorflow/tfjs-core/dist/register_all_gradients';
Reorganizacja kodu, rejestry jądra i gradientu
Zreorganizowaliśmy nasz kod, aby ułatwić zarówno tworzenie operacji i jąder, jak i wdrażanie niestandardowych operacji, jąder i gradientów. Więcej informacji znajdziesz w tym przewodniku .
Przełamanie zmian
Pełną listę istotnych zmian można znaleźć tutaj , ale obejmują one usunięcie wszystkich operacji *Strict, takich jak mulStrict lub addStrict.
Aktualizacja kodu z wersji 2.x
Użytkownicy @tensorflow/tfjs
Zajmij się wszelkimi istotnymi zmianami wymienionymi tutaj ( https://github.com/tensorflow/tfjs/releases )
Użytkownicy @tensorflow/tfjs-core
Zajmij się wszystkimi istotnymi zmianami wymienionymi tutaj ( https://github.com/tensorflow/tfjs/releases ), a następnie wykonaj następujące czynności:
Dodaj powiązane wzmacniacze operacji lub użyj operacji bezpośrednio
Zamiast
import * as tf from '@tensorflow/tfjs-core';
import '@tensorflow/tfjs-backend-webgl';
const a = tf.tensor([1,2,3,4]);
const b = a.sum(); // this is a 'chained' op.
Musisz to zrobić
import * as tf from '@tensorflow/tfjs-core';
import '@tensorflow/tfjs-backend-webgl';
import '@tensorflow/tfjs-core/dist/public/chained_ops/sum'; // add the 'sum' chained op to all tensors
const a = tf.tensor([1,2,3,4]);
const b = a.sum();
Możesz także zaimportować cały łańcuchowy/płynny interfejs API za pomocą następującego importu
import '@tensorflow/tfjs-core/dist/public/chained_ops/register_all_chained_ops';
Alternatywnie możesz użyć opcji bezpośrednio (możesz tu również użyć nazwanego importu)
import * as tf from '@tensorflow/tfjs-core';
import '@tensorflow/tfjs-backend-webgl';
const a = tf.tensor([1,2,3,4]);
const b = tf.sum(a);
Importuj kod inicjujący
Jeśli używasz wyłącznie nazwanego importu (zamiast import * as ...
), w niektórych przypadkach może być konieczne
import @tensorflow/tfjs-core
w górnej części programu, zapobiega to porzuceniu niezbędnej inicjalizacji przez agresywne osoby wstrząsające drzewami.
Aktualizacja kodu z wersji 1.x
Użytkownicy @tensorflow/tfjs
Zajmij się wszelkimi istotnymi zmianami wymienionymi tutaj . Następnie postępuj zgodnie z instrukcjami aktualizacji z wersji 2.x
Użytkownicy @tensorflow/tfjs-core
Zajmij się wszystkimi istotnymi zmianami wymienionymi tutaj , wybierz backend zgodnie z opisem poniżej, a następnie postępuj zgodnie z instrukcjami aktualizacji z wersji 2.x
Wybór backendu
W TensorFlow.js 2.0 usunęliśmy backendy procesora i webgl do ich własnych pakietów. Zobacz @tensorflow/tfjs-backend-cpu , @tensorflow/tfjs-backend-webgl , @tensorflow/tfjs-backend-wasm , @tensorflow/tfjs-backend-webgpu , aby uzyskać instrukcje dotyczące dołączania tych backendów.