Aktualizacja do TensorFlow.js 3.0

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ólnyJS 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 '@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 wymienionymi tutaj istotnymi zmianami ( 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 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.