Introduccion al tipo de dato básico para la construccion de redes neuronales

Así como las matrices son listas de vectores y los vectores son listas de escalares (numeros), un tensor es una version más genérica de estas listas numéricas. podemos decir que:

  • Escalar -> Tensor de 0 dimensiones
  • Vector -> Tensor de 1 dimensión
  • Matriz -> Tensor de 2 dimensiones

Si agregamos n dimensiones entonces tenemos un tensor enedimensional

Los fameworks de deep learning se basan en la manipulación de vectores, por tanto es necesario definir este tipo de dato

import numpy as np

class Tensor(object):
    
    def __init__(self, data):
        '''
        Inicializa un tensor utilizando numpy
        
        @data: una lista de numeros
        '''
        self.data = np.array(data)
        
    def __add__(self, other):
        '''
        @other: un Tensor
        '''
        return Tensor(self.data + other.data)
    
    def __repr__(self):
        return str(self.data.__repr__())
    
    def __str__(self):
        return str(self.data.__str__())

La nueva clase Tensor es capaz de soportar operaciones como suma de tensores

x = Tensor([1,2,3,4])
y = Tensor([4,3,2,1])
z = x + y
print(x)
print(z)
[1 2 3 4]
[5 5 5 5]

En el siguiente notebook se empezará a añadir la capacidad de calcular gradientes de forma automática