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 la creación de módulos tfjs personalizados para respaldar la producción de paquetes de navegadores de tamaño optimizado. Envíe menos JavaScript a sus usuarios. Para obtener más información sobre esto, consulte 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 module package.json apunta a archivos de biblioteca individuales en formato ES2017 (es decir, no un paquete). Esto permite sacudir los árboles y un mayor control del desarrollador sobre la transpilación aguas abajo.

Proporcionamos algunos formatos alternativos como paquetes precompilados para admitir navegadores heredados y otros sistemas de módulos. Siguen la convención de nomenclatura que se describe en la siguiente tabla 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** JS común ES5
tf[-paquete].es2017.fesm.[min].js ESM (lima plana única) ES2017
índice.js*** MEDE ES2017

* [paquete] se refiere a nombres como núcleo/convertidor/capas para subpaquetes del paquete principal tf.js. [min] describe dónde proporcionamos archivos minimizados además de archivos no minificados.

** Nuestra entrada main package.json apunta a este archivo.

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

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

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

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

Además, ya no registramos gradientes para los núcleos de forma predeterminada. Si desea soporte de gradiente/entrenamiento, puede import '@tensorflow/tfjs-core/dist/register_all_gradients';

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

Hemos reorganizado nuestro código para que sea más fácil contribuir con operaciones y núcleos, así como implementar operaciones, núcleos 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.

Actualización del código desde 2.x

Usuarios de @tensorflow/tfjs

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

Usuarios de @tensorflow/tfjs-core

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

Agregue aumentadores de operaciones encadenados o use operaciones directamente

En vez de

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/fluido con la siguiente importación

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

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

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 dejen caer cualquier inicialización necesaria.

Actualización del código desde 1.x

Usuarios de @tensorflow/tfjs

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

Usuarios de @tensorflow/tfjs-core

Realice cualquier cambio importante enumerado aquí , seleccione un servidor como se describe a continuación y luego siga los pasos para actualizar desde 2.x.

Seleccionar un backend(s)

En TensorFlow.js 2.0 eliminamos los backends de 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.