Notas de estudio de Pytorch 2.1: biblioteca de aprendizaje profundo

¿Qué puede hacer una biblioteca de aprendizaje profundo?

  • Aceleración de GPU

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:
Inserte la descripción de la imagen aquí

  • Derivada automática

Encuentre las derivadas parciales de y a abc:
Inserte la descripción de la imagen aquí

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

  • API de capa de red común

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_44145452/article/details/113041708
Recomendado
Clasificación