美文网首页
PyTorch-深度学习简介 2018-10-07

PyTorch-深度学习简介 2018-10-07

作者: 择喀普斯 | 来源:发表于2018-10-07 10:21 被阅读0次

在本教程中,您将使用PyTorch框架来介绍深度学习,并且根据其结论,您可以轻松地将其应用到您的深度学习模型中。脸谱网今年早些时候推出了Py火炬1,整合了谷歌云、AWS和Azure机器学习。在本教程中,我假设您熟悉SCIKIT学习,熊猫,NUMPY和SICPY。这些包是本教程的重要先决条件。

什么是深度学习?

深度学习是机器学习的一个分支,它的算法是由人脑的工作所启发的。这些算法被称为人工神经网络。这些神经网络的例子包括用于图像分类的卷积神经网络、人工神经网络和循环神经网络。

PyTorch简介

PyTorch是一个基于Torch的Python机器学习包,它是一个基于编程语言Lua的开源机器学习包。Py火炬有两个主要特点:

具有强大的GPU加速度的张量计算(如NumPy)

自动微分建立和训练神经网络

为什么你可能更喜欢PyTorch而不是其他Python深度学习库

由于几个原因,你可能喜欢PyTrk到其他深度学习库:

与TensorFlow等其他库不同,在运行模型之前必须先定义整个计算图,PyTorch允许动态定义图。

PyTorch也非常适合深度学习研究,并提供最大的灵活性和速度。

PyTorch Tensors

PyTorch

Tensors非常类似于NUMPY阵列,可以在GPU上运行。这很重要,因为它有助于加快数值计算,这可以将神经网络的速度提高50倍或更多。要使用PyTrk,您需要转到HTTPS://PyTrCH.Or//安装PyTorch。如果使用Conda,可以通过运行这个简单命令来安装PyTrink:

conda install PyTorch torchvision -c PyTorch

为了定义Py火炬张量,我们首先导入火炬包。PyTr火炬允许你定义两种张量——CPU和GPU张量。对于本教程,我假设你正在运行一个CPU机器,但我也会告诉你如何定义GPU中的张量:

import torch

PyTrink的默认张量类型是浮点张量,定义为Tro.FuxActhor。例如,您将从Python列表创建张量:

torch.FloatTensor([[20, 30, 40], [90, 60, 70]])

如果您使用支持GPU的计算机,则可以定义张量。Python代码如下:

torch.cuda.FloatTensor([[20, 30, 40], [90, 60, 70]])

你也可以使用Py火炬张量来进行数学计算,例如加减法:

x = torch.FloatTensor([25]) y = torch.FloatTensor([30]) x + y

还可以定义矩阵并执行矩阵运算。让我们看看如何定义矩阵并转置它。

matrix = torch.randn(4, 5) matrix matrix.t()

PyTorch Autograd

PyTr火炬使用一种称为自动微分的技术,用于数值评估函数的导数。神经网络中的自动微分计算反向传递。在训练神经网络时,权值被随机初始化为零,但不是零。向后通过是从右到左调整这些权重的过程,而前向是反向的(从左到右)。

AutoGad是PyTorch的一个自动化微型图书馆。这个包的核心类是Tr..TunSur.要跟踪它上的所有操作,SET。要计算梯度,调用。这个张量的梯度将被累加在GRAD属性中。

如果要从计算历史中分离张量,请调用.Lead CH()函数。这也将防止张量的未来计算。防止历史追踪的另一种方法是使用火炬。

张量类和函数类是相互连接的,以建立一个非循环图,该图编码计算的完整历史。张量的Goothfn性质指的是创建张量的函数。要计算梯度,调用。如果张量包含多个元素并指定梯度,则它是形状匹配张量。

例如,您将创建两个张量,一个使用AddieStRADAD为真,另一个为假。然后,您将使用这两个张量执行加法和求和运算。然后,计算一张量的梯度。

a

= torch.tensor([3.0, 2.0], requires_grad=True) b = torch.tensor([4.0,

7.0]) ab_sum = a + b ab_sum ab_res = (ab_sum*8).sum() ab_res.backward()

ab_res a.grad

在格拉德上,B不会返回任何东西,因为你没有设置Read Grad对它的真实性。

PyTorch nn模块

这是一个在PyTorch构建神经网络的模块。神经网络依赖于AutoCAD定义模型,并对它们进行区分。让我们从定义神经网络训练的过程开始:

使用一些可学习的参数定义神经网络,称为权重。

迭代输入数据集。

通过网络处理输入。

将预测结果与实际值进行比较并测量误差。

将梯度传播回网络的参数中。

使用简单的更新规则更新网络权重:

重量=重量学习速率梯度

现在,您将使用神经网络包创建一个两层神经网络:

N,

D_in, H, D_out = 64, 1000, 100, 10 x = torch.randn(N, D_in) y =

torch.randn(N, D_out) model = torch.nn.Sequential( torch.nn.Linear(D_in,

H), torch.nn.ReLU(), torch.nn.Linear(H, D_out), ) loss_fn =

torch.nn.MSELoss() learning_rate = 1e-4

让我们解释一下上面使用的一些参数:

N是批量大小。批量大小是在观察数量之后更新权重。

D_in 是输入维度

H 是隐藏的维度

D_out 是输出维度

torch.randn 定义指定尺寸的矩阵

torch.nn.Sequential 初初始化层的线性堆栈

torch.nn.Linear 对输入数据应用线性变换

torch.nn.ReLU 按元素应用relu函数

torch.nn.MSELoss 创建一个衡量输入x和目标y中n个元素之间的均方误差的标准

PyTorch optim Package

接下来,您将使用OpTIM包定义一个为您更新权重的优化器。optim包抽象了优化算法的思想,并提供了常用优化算法的实现,如AdaGrad、RMSProp和Adam。我们将使用亚当优化器,它是最流行的优化器之一。

这个优化器使用的第一个参数是张量,它应该被更新。在前向传递中,你将通过将X传递给模型来计算预测的y。之后,计算和打印损失。在运行反向传递之前,使用优化器更新的变量的所有梯度设置为零。当调用.Read()不重写渐变时,默认情况下完成此操作。然后,调用优化器上的步长函数,并更新其参数。Python实现如下所示。

optimizer

= torch.optim.Adam(model.parameters(), lr=learning_rate) for t in

range(500):  y_pred = model(x)  loss = loss_fn(y_pred, y)  print(t,

loss.item())  optimizer.zero_grad()  loss.backward()  optimizer.step()

PyTorch中的自定义nn模块

有时需要建立自己的自定义模块。在这些情况下,将继承子类nn.Mead。然后,您需要定义一个将接收输入张量并生成输出张量的前向。下面介绍如何使用NN模块实现两层网络。这个模型非常类似于上面的模型,但是不同的是你会使用火炬。神经网络。模块创建一个神经网络。另一个区别是使用随机梯度下降优化器代替亚当。您可以实现自定义NN模块,如下所示:

import

torch class TwoLayerNet(torch.nn.Module):  def __init__(self, D_in, H,

D_out):  super(TwoLayerNet, self).__init__()  self.linear1 =

torch.nn.Linear(D_in, H)  self.linear2 = torch.nn.Linear(H, D_out)  def

forward(self, x):  h_relu = self.linear1(x).clamp(min=0)  y_pred =

self.linear2(h_relu)  return y_pred N, D_in, H, D_out = 64, 1000, 100,

10 x = torch.randn(N, D_in) y = torch.randn(N, D_out) model =

TwoLayerNet(D_in, H, D_out) criterion = torch.nn.MSELoss() optimizer =

torch.optim.SGD(model.parameters(), lr=1e-4) for t in range(500): 

y_pred = model(x)  loss = criterion(y_pred, y)  print(t, loss.item()) 

optimizer.zero_grad()  loss.backward()  optimizer.step()

最后

PyTr火炬允许您实现不同类型的层,例如卷层、环层和线性层。

相关文章

网友评论

      本文标题:PyTorch-深度学习简介 2018-10-07

      本文链接:https://www.haomeiwen.com/subject/gktlaftx.html