动态计算图
在深度学习中使用 PyTorch 的主要原因之一,是我们可以自动获得定义的函数的梯度/导数。
当我们操作我们的输入时,会自动创建一个计算图。该图显示了如何从输入到输出的动态计算过程。
为了熟悉计算图的概念,下面将为以下函数创建一个:
这里的 是我们的参数,我们想要优化(最大化或最小化)输出 . 为此,我们想要获得梯度.
在下面的代码中,我将使用[1,2,3]作输入。
# 只有浮动张量有梯度 x = torch.arange(1,4, dtype=torch.float32, requires_grad=True) print(“X”, x) # X tensor([1., 2., 3.], requires_grad=True)
现在让我来一步一步地构建计算图,了解每个操作是到底是如何添加到计算图中的。
a = x + 2 b = a ** 2 c = b + 3 y = c.mean() print(“Y”, y) # Y tensor(19.6667, grad_fn=)
使用上面的语句,我们创建了一个类似于下图的计算图(通过tensorboard )查看:
我们计算 a 基于输入x 和常数2, b是 a平方等等操作。计算图通常以相反的方向可视化(箭头从结果指向输入)。
我们可以通过backward()在最后一个输出上调用函数来对计算图执行反向传播,这样可以,计算了每个具有属性的张量的梯度requires_grad=True:
y.backward()
最后打印x.grad就可以查看对应梯度。
GPU支持操作
在Pytorch中GPU 可以并行执行数以千计的小运算,因此非常适合在神经网络中执行大型矩阵运算。
「CPU 与 GPU的区别」
PyTorch 使用GPU,需要搭建NVIDIA 的CUDA和cuDNN。
下面代码,检查是否有可用的 GPU:
gpu_avail = torch.cuda.is_available() print(“Is the GPU available? %s” % str(gpu_avail))
现在创建一个张量并将其推送到GPU设备:
device = torch.device(“cuda”) if torch.cuda.is_available() else torch.device(“cpu”) print(“Device”, device) x = x.to(device) print(“X”, x) # Device cuda # X tensor([1., 1., 1.], device=cuda:0)
cuda 旁边的零表示这是计算机上的第0个 GPU 设备。因此,PyTorch 还支持多 GPU 系统,
下面将CPU 上的大型矩阵乘法的运行时间与 GPU 上的运算进行比较:
根据系统中的配置而定,GPU加速提高模型的训练速度。
Ubuntu是一个以桌面应用为主的Linux操作系统。它是一个开放源代码的自由软件,提供了一个健壮、功能丰富的计算环境,既适合家庭使用又适用于商业环境。Ubuntu将为全球数百个公司提供商业支持。 ...
查看全文Docker采取了一种保守的方法来清理未使用的对象(通常称为“垃圾收集”),例如图像,容器,卷和网络:除非您明确要求Docker这样做,否则通常不会删除这些对象。这可能会导致Docker使用额外的磁盘空...
查看全文新浪科技讯 北京时间5月27日晚间消息,据报道,四位知情人士今日透露,亚马逊、微软和谷歌这三大云计算服务提供商,正在竞争波音公司(Boeing)价值10亿美元的云服务合同。 这些...
查看全文新浪科技讯 北京时间5月27日晚间消息,据报道,多位知情人士今日称,继加州、纽约州和华盛顿州之后,马萨诸塞州和宾夕法尼亚州的总检察长也加入到对亚马逊的反垄断调查中。 如今,越来越...
查看全文
您好!请登录