赞
踩
众所周知,在进行运算的时候,运算初期CPU是优于GPU的,但随着时间和数据的不断增加,GPU运算的优势就无限放大,因此GPU也广泛用于机器学子中。话不多说,直接上代码:
#GPU加速 import torch import time print(torch.__version__) print(torch.cuda.is_available()) #a矩阵行列为10000,1000 a = torch.randn(10000,1000) b = torch.randn(1000,2000) #t0:开始时刻,t1:结束时刻,matmul:cpu模式矩阵乘法 t0 = time.time() c = torch.matmul(a,b) t1 = time.time() print(a.device,t1-t0,c.norm(2)) device = torch.device('cuda') a = a.to(device) b = b.to(device) t0 = time.time() c = torch.matmul(a,b) t1 = time.time() print(a.device,t1-t0,c.norm(2)) #在计算一次,因为第一次使用cuda会有加载时间,导致不准确 t0 = time.time() c = torch.matmul(a,b) t1 = time.time() print(a.device,t1-t0,c.norm(2))
下图为运算结果:
由上图可以看出,再去除cuda首次加载时间后,GPU运算时间大大小于CPU运算时间。
y=a^2x+bx+c这个函数,求当x=1时的导数,分别为y对a,y对b,y对c,结果为2a,1,1。让我们来看代码:
#自动求导
import torch
ftom torch import autograd
x = torch.tensor(1.)
a = torch.tensor(1.,requires_grad=True)
b = torch.tensor(2.,requires_grad=True)
c = torch.tensor(3.,requires_grad=True)
y = a**2*x+b*x+c
#求导之前,abc的梯度
print('before:',a.grad,b.grad,c.grad)
grads = autograd.grad(y,[a,b,c])
print('after:',grads[0],grads[1],grads[2])
给x初始值为1,a,b,c分别为1,2,3。
由上图可知,得到的结果为2,1,1,因为我们初值设为1,如果为a则和预期一样。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。