Что изменилось в 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.