¿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.