Tensorflow.js es una biblioteca de JavaScript desarrollada por Google para ejecutar y entrenar el modelo de aprendizaje automático en el navegador o en Node.js.
La función tf.conv3d() se usa para calcular convoluciones 3d sobre entradas dadas. Las entradas son principalmente datos de imágenes en 3D como imágenes de CT o MRI o cualquier video. Para extraer características de estos datos, usamos una capa de convolución que crea núcleos de convolución y genera un tensor de 4D o 5D.
Sintaxis:
tf.conv3d (x, filter, strides, pad, dataFormat?, dilations?)
Parámetros:
- x : El rango de tensor de 4 y 5 se introduce en la convolución. El tensor también puede ser una array tipificada con forma [lote, profundidad, altura, ancho, canales].
- filtro : el filtro es de rango 5 y el mismo tipo de datos que x con forma [filterDepth, filterHeight, filterWidth, inChannels, outChannels]. Los canales internos del filtro y la entrada deben coincidir.
- zancada: Las zancadas se utilizan para mover el filtro sobre el tensor de entrada. Para ello se pasa una lista de longitud >=5.
- pad : Los algoritmos de relleno son del tipo ‘mismo’ y ‘válido’. ‘Mismo’ creará una salida del mismo tamaño que la entrada. Mientras que la salida ‘válida’ será de menor tamaño que la entrada.
- dataFormat : de dos strings puede ser: «NHWC», «NCHW». Con el formato predeterminado “NHWC”, los datos se almacenan en el orden de: [lote, profundidad, altura, ancho, canales]. Es necesario especificar el formato de los datos de entrada y salida. Esto es opcional.
- dilataciones : la tasa de dilatación son dos tuplas de números enteros que verifican la tasa de la convolución. [dilationDepth, dilatationHeight, dilatationWidth] se pasa como parámetros. Esto es opcional.
Ejemplo 1: En este ejemplo, crearemos un tensor kernel y de entrada manualmente y realizaremos una operación de convolución. Imprimiremos la forma de los tensores para anotar el número de canales y el algoritmo de relleno.
Javascript
// Importing libraries import * as from "@tensorflow/tfjs" // Input tensor const X=tf.tensor5d([[[[[0.],[2.]], [[3.],[1.]], [[4.],[2.]]], [[[1.],[0.]], [[2.],[1.]], [[4.],[2.]]]]]); console.log('Shape of the input:' ,X.shape); // Kernel vector has been set const kernel=tf.tensor5d([[[[[0.3,1.2]]],[[[0.6,1.8]]],[[[0.8,1.5]]]]]); console.log('Shape of the kernel:' ,kernel.shape); // Output tensor after convolution let output=tf.conv3d(X,kernel,strides=[1,1,1,1,1],'same'); output.print(); console.log('Shape of the output tensor:',output.shape);
Producción:
Shape of the input: 1,2,3,2,1 Shape of the kernel: 1,3,1,1,2 Tensor [[[ [[2 , 5.0999999],], [[2.8000002, 7.1999998],], [[1.5 , 4.8000002],]], [ [[0.8 , 1.5 ],], [[2.2 , 4.8000002],], [[1.5 , 4.8000002],]]]] Shape of the output tensor: 1,2,3,1,2
Ejemplo 2: en el siguiente código, se producirá un error ya que el número de canales, es decir, el quinto índice del tensor de entrada y el cuarto índice del tensor del núcleo no coincidirán.
Javascript
import * as from "@tensorflow/tfjs" // Input tensor const X=tf.tensor5d([0.,2.,3.,1.,4.,2.,1.,0.,2.,1.,4.,2.],[1,2,3,2,1]); // Kernel vector has been set const kernel=tf.tensor5d([0.3,1.2,0.6,1.8,0.8,1.5],[1,1,1,2,3]); // Output tensor after convolution let output=tf.conv3d(X,kernel,strides=[1,1,1,2,1],'same'); output.print(); console.log('Shape of the output tensor:',output.shape);
Producción:
An error occurred on line: 10 Error in conv3d: depth of input (1) must match input depth for filter 2.
Ejemplo 3: En este ejemplo realizaremos dos operaciones de convolución. En primer lugar, crearemos un tensor de valores seleccionados aleatoriamente de una distribución normal y, después de la convolución, imprimiremos el tensor de salida. Después de eso, tomamos un tensor de mayor tamaño (que puede ser una imagen o un video en 3D) y realizamos una convolución que nuevamente generará un gran tensor. Imprimiremos la forma de salida de ese tensor.
Javascript
// Importing libraries import * as from "@tensorflow/tfjs" // A tensor with values selected from a // normal distribution const x=tf.randomNormal([1,2,4,1,3]); const kernel=tf.tensor5d([0.3,1.2,0.6,1.8,0.8,1.5],[1,1,2,3,1]) // Output tensor after convolution let out=tf.conv3d(x,kernel,strides=[1,1,1,1,1],'same') // Printing the output tensor console.log('First output tensor is:') out.print() // Input tensor of bigger shape is taken const y=tf.randomNormal([3,25,25,25,1]); const kernel2=tf.randomNormal([1,3,3,1,1]) // Convolution is performed let output2=tf.conv3d(y,kernel2,strides=[1,1,1,1,1],'same') // Output2.print() // Printing out the bigger output shape console.log('\n The shape of the output tensor',output2.shape)
Producción:
First output tensor is: Tensor [[[ [[-0.702378 ],], [[1.9029824 ],], [[-0.1904218],], [[-2.2287691],]], [ [[-1.9580686],], [[-2.8335922],], [[0.0155853 ],], [[-3.6478395],]]]] The shape of the bigger output tensor 3,25,25,25,1
Referencia: https://js.tensorflow.org/api/1.0.0/#conv3d
Publicación traducida automáticamente
Artículo escrito por barnadipdey2510 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA