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.