Tensorflow.js tf.conv3d() Función

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *