Esta entrada es parte del curso de Deep learning con PyTorch.
Uno de los conceptos más frecuentes en machine learning es el de tensor. Un tensor es la generalización del concepto de vector utilizando el rango para definir el número de indices del tensor. Por ejemplo, un vector es un tensor de rango 1, una matriz es un tensor de rango 2 y un tensor de rango tres sería una matriz con un eje extra. La clase torch.tensor de PyTorch pemite trabajar cómodamente con tensores tanto en la CPU como en la GPU. Existen diferentes formas de crear un tensor. In [2]:
import torch import numpy as np #A partir de una lista de Python list = ([1,2],[3,4],[5,6]) tensor1=torch.tensor(list) print(tensor1) #A partir de los datos directamente tensor2=torch.tensor([[[1, 2, 3],[4, 5, 6]],[[1, 2, 3],[4, 5, 6]]]) print(tensor2) #A partir de un array numpy tensor3=torch.tensor(np.array([1,2,3,4])) print(tensor3) #Usando una operación de creación de tensores tensor4=torch.rand(2,3) print(tensor4)
tensor([[1, 2], [3, 4], [5, 6]]) tensor([[[1, 2, 3], [4, 5, 6]], [[1, 2, 3], [4, 5, 6]]]) tensor([1, 2, 3, 4]) tensor([[0.6060, 0.8052, 0.1538], [0.8096, 0.6612, 0.4279]])
In [22]:
#A través del método size se obtiene el tamaño del tensor, su rango y las dimensiones #Un tensor de rango 2 (3,2) para tensor1 print(tensor1.size()) #Un tensor de rango 3 con las dimensiones (2,2,3) para tensor2 print(tensor2.size())
torch.Size([3, 2]) torch.Size([2, 2, 3])
In [36]:
#A los componentes de los tensores se puede acceder como usualmente en Python print(tensor1[0]) print(tensor1[0,1]) #Con view se cambia las dimensiones y el rango del tensor tensor5=torch.rand(2,4) print(tensor5.size()) tensor6=tensor5.view(8) print(tensor6.size())
tensor([1, 2]) tensor(2) torch.Size([2, 4]) torch.Size([8])
In [49]:
#Un tensor se puede crear con requires_grad=True para que torch.autograd registre las operaciones y realice la diferenciación automática x = torch.tensor([2],dtype=torch.float,requires_grad=True) y = x.pow(3) y.backward() x.grad
Out[49]:
tensor([12.])
In [3]:
#PyTorch permite trabajar con CUDA para realizar las operaciones en la GPU torch.cuda.is_available() torch.cuda.current_device() print(torch.cuda.get_device_name(0))
Tesla T4
In [11]:
#Comparación del tiempo en realizar una multiplicaión de matrices en la CPU y en la GPU %%time for i in range(500): x = torch.randn(1000,1000) y = torch.randn(1000,1000) z = torch.matmul(x,y)
CPU times: user 14.6 s, sys: 57.1 ms, total: 14.6 s Wall time: 14.7 s
In [10]:
#Se realiza la multiplicación en la GPU %%time cuda0 = torch.device('cuda:0') for i in range(500): x = torch.randn(1000,1000,device = cuda0) y = torch.randn(1000,1000,device =cuda0) z = torch.matmul(x,y)
CPU times: user 101 ms, sys: 101 ms, total: 202 ms Wall time: 208 ms
Deja una respuesta