¿Qué puede hacer una biblioteca de aprendizaje profundo?
import torch
import time
print(torch.__version__)
print(torch.cuda.is_available())
a = torch.randn(10000, 1000) # 随机生成服从正态分布10000行x1000列的张量
b = torch.randn(1000, 2000)
t0 = time.time()
c = torch.matmul(a, b)
t1 = time.time()
print(a.device, t1 - t0, c.norm(2)) # cpu 0.41573262214660645 tensor(140925.6406)
# device = torch.device('cuda')
# a = a.to(device)
# b = b.to(device)
a = a.cuda()
b = b.cuda()
t0 = time.time()
c = torch.matmul(a, b)
t2 = time.time()
print(a.device, t2 - t0, c.norm(2))
t0 = time.time()
c = torch.matmul(a, b)
t2 = time.time()
print(a.device, t2 - t0, c.norm(2)) # cuda:0 0.006535530090332031 tensor(141469.8906, device='cuda:0')
1. ¿Cuál es la diferencia entre torch.rand () y torch.randn ()?
torch.randn (* tamaños, out = None)
randn es generar datos aleatoriamente que obedecen a la distribución normal, y el valor de retorno es un tensor.
parámetro:
sizes (int...) - 整数序列,定义了输出张量的形状
out (Tensor, optinal) - 结果张量
antorcha.rand (* tamaños, out = None)
rand son datos generados aleatoriamente que obedecen a una distribución uniforme y el valor de retorno es un tensor.
parámetro:
sizes (int...) - 整数序列,定义了输出张量的形状
out (Tensor, optinal) - 结果张量
2. pytorch norm function-torch.norm
torch.norm (input, p = 'fro', dim = None, keepdim = False, out = None, dtype = None)
Devuelve la norma matricial o norma vectorial del tensor dado
3. ¿Hay alguna diferencia entre .cuda () y .to (dispositivo)
en pytorch ? Cuda () es equivalente a .to (dispositivo)
ejecutando la captura de pantalla:
Encuentre las derivadas parciales de y a abc:
import torch
from torch import autograd
x = torch.tensor(1.)
a = torch.tensor(1., requires_grad=True) # requires_grad=True 是告诉pytorch我们是对a b c求导
b = torch.tensor(2., requires_grad=True)
c = torch.tensor(3., requires_grad=True)
y = a**2 * x + b * x + c
print('\nbefore: ', a.grad, b.grad, c.grad)
grads = autograd.grad(y, [a, b, c])
print('\nafter: ', grads[0], grads[1], grads[2])
Ejemplo de uso de la función torch.autograd.grad () en Pytorch
autograd.grad (salidas, entradas, grad_outputs = Ninguno, retener_grafo = Ninguno,
crear_grafo = Falso, only_inputs = True, allow_unused = False)
salidas: la variable dependiente para la derivación (función que requiere derivación)
Entradas: la variable independiente a derivar.
grad_outputs: si las salidas son escalares, entonces grad_outputs = None, es decir, no necesita escribir; si las salidas son un vector, entonces este parámetro debe escribirse, si no lo escribe, se informará un error