当前位置: 首页 > 科技观察

DynamicComputationalGraphsandGPUSupportOperations

时间:2023-03-12 08:50:44 科技观察

DynamicComputationalGraphs在深度学习中使用PyTorch的主要原因之一是我们可以自动获取定义函数的梯度/导数。当我们操纵我们的输入时,会自动创建一个计算图。该图显示了动态计算过程如何从输入到输出。为了熟悉计算图的概念,下面将创建一个函数:我们的参数在哪里,我们想要优化(最大化或最小化)输出。为此,我们需要获得梯度。在下面的代码中,我将使用[1,2,3]作为输入。#只有浮动张量才有梯度x=torch.arange(1,4,dtype=torch.float32,requires_grad=True)print("X",x)#Xtensor([1.,2.,3.],requires_grad=True)现在让我一步步构建计算图,并了解每个操作是如何添加到计算图中的。a=x+2b=a**2c=b+3y=c.mean()print("Y",y)#Ytensor(19.6667,grad_fn=)使用上面的语句,我们创建一个类似的计算下图(通过tensorboard)查看:我们根据输入x和常数2计算a,b是a的平方等。计算图通常以相反的方向可视化(箭头从结果指向输入)。我们可以通过在最后一个输出上调用函数backward()对计算图进行反向传播,这样就可以计算出每个属性为requires_grad=True的tensor的梯度:y.backward()最后打印出x.grad可以查看对应的梯度。GPU支持的操作Pytorch中的GPU可以并行执行数千个小操作,使其成为在神经网络中执行大型矩阵操作的理想选择。《CPU和GPU的区别》PyTorch使用GPU,需要搭建NVIDIA的CUDA和cuDNN。以下代码检查GPU是否可用:gpu_avail=torch.cuda.is_available()print("IstheGPUavailable?%s"%str(gpu_avail))现在创建一个张量并将其推送到GPU设备:device=torch。device("cuda")iftorch.cuda.is_available()elsetorch.device("cpu")print("Device",device)x=x.to(device)print("X",x)#Devicecuda#Xtensor([1.,1.,1.],device='cuda:0')cuda旁边的零表示这是计算机上的第0个GPU设备。因此,PyTorch也支持多GPU系统。下面比较大型矩阵乘法在CPU上与在GPU上的运行时间:根据系统中的配置,GPU加速提高了模型的训练速度。