Actualización a TensorFlow.js 3.0

Qué ha cambiado en TensorFlow.js 3.0

Las notas de la versión están disponibles aquí . Algunas características notables de cara al usuario incluyen:

Módulos personalizados

Brindamos soporte para crear módulos tfjs personalizados para admitir la producción de paquetes de navegador optimizados para el tamaño. Envíe menos JavaScript a sus usuarios. Para aprender más sobre esto, vea este tutorial .

Esta característica está orientada a la implementación en el navegador; sin embargo, habilitar esta capacidad motiva algunos de los cambios que se describen a continuación.

Código ES2017

Además de algunos paquetes precompilados, la forma principal en que ahora enviamos nuestro código a NPM es como módulos ES con sintaxis ES2017 . Esto permite a los desarrolladores aprovechar las funciones modernas de JavaScript y tener un mayor control sobre lo que envían a sus usuarios finales.

Nuestro punto de entrada del module package.json a archivos de biblioteca individuales en formato ES2017 (es decir, no es un paquete). Esto permite la sacudida del árbol y un mayor control del desarrollador sobre la transpilación posterior.

Proporcionamos algunos formatos alternativos como paquetes precompilados para admitir navegadores heredados y otros sistemas de módulos. Siguen la convención de nomenclatura descrita en la tabla a continuación y puede cargarlos desde CDN populares como JsDelivr y Unpkg.

Nombre del archivo Formato del módulo Versión de idioma
tf[-paquete].[min].js* UMD ES5
tf[-paquete].es2017.[min].js UMD ES2017
tf[-paquete].node.js** ComúnJS ES5
tf[-paquete].es2017.fesm.[min].js ESM (archivo plano único) ES2017
índice.js*** MEDE ES2017

* [paquete] se refiere a nombres como core/converter/layers para subpaquetes del paquete principal tf.js. [min] describe dónde proporcionamos archivos minimizados además de archivos no minimizados.

** Nuestro paquete.json puntos de entrada main a este archivo.

*** La entrada de nuestro module package.json apunta a este archivo.

Si está usando tensorflow.js a través de npm y está usando un paquete, es posible que deba ajustar la configuración de su paquete para asegurarse de que pueda consumir los módulos ES2017 o señalarlo a otra de las entradas en nuestro paquete.json.

@tensorflow/tfjs-core es más delgado por defecto

Para permitir una mejor sacudida de árboles , ya no incluimos la API de encadenamiento/fluidez en los tensores de forma predeterminada en @tensorflow/tfjs-core. Recomendamos usar operaciones (ops) directamente para obtener el paquete más pequeño. Proporcionamos una importación import '@tensorflow/tfjs-core/dist/public/chained_ops/register_all_chained_ops'; que restaura la API de encadenamiento.

Tampoco registramos gradientes para kernels de forma predeterminada. Si desea soporte de gradiente/entrenamiento, puede import '@tensorflow/tfjs-core/dist/register_all_gradients';

Reorganización de código, kernel y registros de gradiente

Hemos reorganizado nuestro código para que sea más fácil contribuir con operaciones y kernels, así como implementar operaciones, kernels y gradientes personalizados. Consulte esta guía para obtener más información .

Cambios importantes

Puede encontrar una lista completa de cambios importantes aquí , pero incluyen la eliminación de todas las operaciones *Strict como mulStrict o addStrict.

Código de actualización de 2.x

Usuarios de @tensorflow/tfjs

Aborde los cambios importantes que se enumeran aquí ( https://github.com/tensorflow/tfjs/releases )

Usuarios de @tensorflow/tfjs-core

Aborde los cambios importantes que se enumeran aquí ( https://github.com/tensorflow/tfjs/releases ), luego haga lo siguiente:

Agregue aumentadores de operaciones encadenados o use operaciones directamente

Más bien que

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.

Necesitas hacer

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

También puede importar toda la API de encadenamiento/fluidez con la siguiente importación

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

Alternativamente, puede usar la operación directamente (también podría usar importaciones con nombre aquí)

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

Importar código de inicialización

Si está utilizando exclusivamente importaciones con nombre (en lugar de import * as ... ), en algunos casos es posible que deba hacer

import @tensorflow/tfjs-core

cerca de la parte superior de su programa, esto evita que los agitadores de árboles agresivos descarten cualquier inicialización necesaria.

Código de actualización de 1.x

Usuarios de @tensorflow/tfjs

Aborde los cambios importantes que se enumeran aquí . Luego siga las instrucciones para actualizar desde 2.x

Usuarios de @tensorflow/tfjs-core

Aborde los cambios importantes que se enumeran aquí , seleccione un backend como se describe a continuación y luego siga los pasos para actualizar desde 2.x

Seleccionando un backend(s)

En TensorFlow.js 2.0, eliminamos los backends cpu y webgl en sus propios paquetes. Consulte @tensorflow/tfjs-backend-cpu , @tensorflow/tfjs-backend-webgl , @tensorflow/tfjs-backend-wasm , @tensorflow/tfjs-backend-webgpu para obtener instrucciones sobre cómo incluir esos backends.