Operaciones con tensores: división y producto tensor

| Última modificación: 12 de abril de 2024 | Tiempo de Lectura: 2 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

En otro artículo hemos visto algunas operaciones con tensores, entre ellas la suma y el producto de tensores Hadamard. En este post, veremos cómo se lleva a cabo la división de tensores y el producto tensor. También veremos cómo trabajar tensores con TensorFlow.

Operaciones con tensores

División de tensores

La división de tensores está dada por las siguientes expresiones:

Operaciones con tensores: división
#Operaciones con tensores
A = np.array ([[[1,  2,  3], [4,  5,  6], [7,  8,  9]],
                         [[11,  12,  13], [14,  15,  16], [17,  18,  19]],
                         [[21,  22,  23], [24,  25,  26], [27,  28,  29]]])

B = np.array ([[[1,  2,  3], [4,  5,  6], [7,  8,  9]],
                         [[11,  12,  13], [14,  15,  16], [17,  18,  19]],
                         [[21,  22,  23], [24,  25,  26], [27,  28,  29]]])

C = A / B
print (C)

[[[1. 1. 1.]

[1. 1. 1.]

[1. 1. 1.]]

[[[1. 1. 1.]

[1. 1. 1.]

[1. 1. 1.]]

[[[1. 1. 1.]

[1. 1. 1.]

[1. 1. 1.]]]

print (A.shape)
print (B.shape)
print (C.shape)

(3, 3, 3)

(3, 3, 3)

(3, 3, 3)

Producto tensor

El operador del producto tensor a menudo se denota como un círculo con una pequeña x en el centro: ⦻.

Dado un tensor A con a dimensiones y un tensor B con r dimensiones, el producto de estos tensores será un nuevo tensor con q + r dimensiones.

El producto tensor no se limita a tensores, sino que también se puede realizar en matrices y vectores, que pueden ser un buen lugar para practicar con el fin de desarrollar la intuición para dimensiones superiores.

Producto tensor para vectores

Producto tensor para matrices

Numpy puede realizar el producto tensor usando la función tensordot. La función toma como argumentos los dos tensores a multiplicar y el eje sobre el que se suman los productos, llamada sum reduction. Para calcular el producto tensor, también llamado producto de punto tensor en nympy, el eje debe establecerse en 0.

#Operaciones con tensores
A = np.array ([1,  2])
B = np.array ([3,  4])

C = np.tensordot (A, B, axes = 0)

print (C)

[[3 4]

[6 8]]

#Igual a np.dot (A, B), pero para tensores
#Operaciones con tensores
A = np.array ([[[1,  2,  3], [4,  5,  6], [7,  8,  9]],
                         [[11,  12,  13], [14,  15,  16], [17,  18,  19]],
                         [[21,  22,  23], [24,  25,  26], [27,  28,  29]]])

B = np.array ([[[1,  2,  3], [4,  5,  6], [7,  8,  9]],
                         [[11,  12,  13], [14,  15,  16], [17,  18,  19]],
                         [[21,  22,  23], [24,  25,  26], [27,  28,  29]]])


C = np.tensordot (A, B)
C.shape

(3, 3)

Tensores con TensorFlow

Entre las operaciones con tensores, vamos a ver algunos pequeños ejemplos sobre tensores usando tensorflow:

import tensorflow as tf
import numpy as np
#!pip install tensorflow

Con tf.constant () generamos une scalar tipo int32:

#Operaciones con tensores
rank_tensor = tf.constant (4)
print (rank_0_tensor)

tf.Tensor (4, shape = (), dtype = int32)

Crear un vector

También podemos crear un vector.

Con un axis (axis 1)

#Operaciones con tensores
rank_tensor = tf.constant ([2.0,  3.0,  4.0])
print (rank_1_tensor)

tf.Tensor ([2. 3. 4.], shape = (3, ), dtype = float32)

#Operaciones con tensores
rank_1_tensor.shape

TensorShape ([3])

rank_1_tensor.dtype

tf.float32

0.333152

0.333152

1

1

Con dos axis (axis 2)

#Operaciones con tensores
rank_2_tensor = tf.constant ([1,  2],
                                                   [3,  4],
                                                   [5,  6], dtype = tf.float16)

rank_2_tensor

<tf.Tensor: shape = shape = (3, 2), dtype = float16, numpy =

array ([[1., 2.],

[1., 2.],

[1., 2.]], dtype = float16)>

Con más axis

#Operaciones con tensores
rank_3_tensor = tf.constant ([[[0,  1,  2,  3,  4],
                                                      [5,  6,  7,  8,  9],
                                                    [[10,  11,  12,  13,  14],
                                                     [15,  16,  17,  18,  19],
                                                    [[20,  21,  22,  23,  24],
                                                     [25,  26,  27,  28,  29]]])

rank_3_tensor

<tf.Tensor: shape = (3, 2, 5), dtype = int32, numpy = array(

[[[0, 1, 2, 3, 4],

[5, 6, 7, 8, 9],

[[10, 11, 12, 13, 14],

[15, 16, 17, 18, 19],

[[20, 21, 22, 23, 24],

[25, 26, 27, 28, 29]]])>

Hay muchas formas de visualizar un tensor con 3 axis:

Con np.array () podemos convertir un tensor a una variable de numpy:

#Operaciones con tensores
np.array (rank_2_tensor)
type (np.array (rank_2_tensor))

numpy.ndarray

np.array (rank_2_tensor).shape

(3, 2)

También podemos realizar operaciones matemáticas como suma, resta, multiplicación o división. Incluso podemos realizar otro tipo de operaciones con tensores que son muy usadas, como son:

  • tf.reduce_max () para encontrar el valor más grande.
  • tf.argmax () para encontrar el índice de valor más grande.

¿Quieres seguir aprendiendo?

Si quieres seguir aprendiendo, podrás acceder a una de las disciplinas más demandadas con la guía del Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp, una formación en la que adquirirás todos los conocimientos imprescindibles para obtener el trabajo de tus sueños en pocos meses. ¡Entra ya para solicitar información e impulsa tu futuro!

Sandra Navarro

Business Intelligence & Big Data Advisor & Coordinadora del Bootcamp en Data Science, Big Data & Machine Learning.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado