Обновление до TensorFlow.js 3.0

Что изменилось в TensorFlow.js 3.0

Примечания к выпуску доступны здесь . Несколько примечательных функций, ориентированных на пользователя, включают в себя:

Пользовательские модули

Мы предоставляем поддержку для создания пользовательских модулей tfjs для поддержки создания пакетов браузеров с оптимизированным размером. Предоставляйте своим пользователям меньше JavaScript. Чтобы узнать больше об этом, посмотрите этот урок .

Эта функция предназначена для развертывания в браузере, однако включение этой возможности приводит к внесению некоторых изменений, описанных ниже.

Код ES2017

В дополнение к некоторым пакетам предварительной компиляции, основной способ отправки нашего кода в NPM — это модули ES с синтаксисом ES2017 . Это позволяет разработчикам использовать преимущества современных функций JavaScript и лучше контролировать то, что они отправляют своим конечным пользователям.

Наша точка входа module package.json для отдельных файлов библиотеки в формате ES2017 (т. е. не для пакета). Это позволяет трясти деревья и лучше контролировать последующую транспортировку.

Мы предоставляем несколько альтернативных форматов в виде предварительно скомпилированных пакетов для поддержки устаревших браузеров и других модульных систем. Они соответствуют соглашению об именах, описанному в таблице ниже, и вы можете загружать их из популярных CDN, таких как JsDelivr и Unpkg.

Имя файла Формат модуля Языковая версия
tf[-пакет].[мин].js* УМД ES5
tf[-пакет].es2017.[мин].js УМД ES2017
tf[-пакет].node.js** CommonJS ES5
tf[-пакет].es2017.fesm.[мин].js ESM (один плоский файл) ES2017
index.js*** ЭСМ ES2017

* [пакет] относится к таким именам, как ядро/конвертер/слои для подпакетов основного пакета tf.js. [min] описывает, где мы предоставляем минимизированные файлы в дополнение к неминифицированным файлам.

** Наш main вход package.json указывает на этот файл.

*** Вход в наш module package.json указывает на этот файл.

Если вы используете tensorflow.js через npm и используете упаковщик, вам может потребоваться настроить конфигурацию упаковщика, чтобы убедиться, что он может либо использовать модули ES2017, либо указывать на другую запись в out package.json.

@tensorflow/tfjs-core по умолчанию тоньше

Чтобы обеспечить лучшее встряхивание деревьев, мы больше не включаем API цепочки/плавности для тензоров по умолчанию в @tensorflow/tfjs-core. Мы рекомендуем использовать операции (ops) напрямую, чтобы получить наименьший пакет. Мы предоставляем import '@tensorflow/tfjs-core/dist/public/chained_ops/register_all_chained_ops'; это восстанавливает цепочку API.

Мы также больше не регистрируем градиенты для ядер по умолчанию. Если вам нужна поддержка градиента/обучения, вы можете import '@tensorflow/tfjs-core/dist/register_all_gradients';

Реорганизация кода, реестры ядра и градиента

Мы реорганизовали наш код, чтобы упростить как добавление операций и ядер, так и реализацию пользовательских операций, ядер и градиентов. См. это руководство для получения дополнительной информации .

Критические изменения

Полный список критических изменений можно найти здесь , но они включают в себя удаление всех операций *Strict, таких как mulStrict или addStrict.

Обновление кода с версии 2.x

Пользователи @tensorflow/tfjs

Устраните любые критические изменения, перечисленные здесь ( https://github.com/tensorflow/tfjs/releases ).

Пользователи @tensorflow/tfjs-core

Устраните все критические изменения, перечисленные здесь ( https://github.com/tensorflow/tfjs/releases ), а затем выполните следующие действия:

Добавляйте связанные операции-аугментаторы или используйте операции напрямую

Скорее, чем

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.

Вам нужно сделать

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();

Вы также можете импортировать все цепочки/свободные API с помощью следующего импорта

import '@tensorflow/tfjs-core/dist/public/chained_ops/register_all_chained_ops';

В качестве альтернативы вы можете использовать операцию напрямую (здесь вы также можете использовать именованный импорт)

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);

Импортировать код инициализации

Если вы используете исключительно именованный импорт (вместо import * as ... ), то в некоторых случаях вам может потребоваться сделать

import @tensorflow/tfjs-core

в верхней части вашей программы это предотвращает сброс любой необходимой инициализации агрессивными инструментами древовидной обработки.

Обновление кода с версии 1.x

Пользователи @tensorflow/tfjs

Устраните все критические изменения, перечисленные здесь . Далее следуйте инструкциям по обновлению с версии 2.x.

Пользователи @tensorflow/tfjs-core

Устраните все критические изменения, перечисленные здесь , выберите серверную часть, как описано ниже, а затем следуйте инструкциям по обновлению с версии 2.x.

Выбор бэкэнда(ов)

В TensorFlow.js 2.0 мы удалили серверные части процессора и webgl в отдельные пакеты. Инструкции по включению этих бэкэндов см. в @tensorflow/tfjs-backend-cpu , @tensorflow/tfjs-backend-webgl , @tensorflow/tfjs -backend-wasm , @tensorflow/tfjs-backend-webgpu .