最完整的PyTorch数据科学家指南(1)

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"进行深度学习时您将需要的所有PyTorch功能。从实验/研究的角度来看。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"PyTorch"},{"type":"text","text":" 已经成为现在创建神经网络的事实上的标准之一,我喜欢它的界面。但是,对于初学者来说,要获得它有些困难。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我记得几年前经过一些广泛的实验之后才选择PyTorch。实话实说,我花了很多时间才捡起来,但我很高兴我从Keras搬到 PyTorch。"},{"type":"text","marks":[{"type":"strong"}],"text":" 凭借其高度可定制性和python语法,"},{"type":"text","text":" PyTorch"},{"type":"text","marks":[{"type":"strong"}],"text":"可以与 "},{"type":"text","text":"他人一起工作,这是我的荣幸,我将其推荐给任何希望通过深度学习进行繁重工作的人。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"因此,在本PyTorch指南中, "},{"type":"text","marks":[{"type":"strong"}],"text":"我将尝试减轻PyTorch对于初学者的痛苦,并介绍在使用Pytorch"},{"type":"text","text":" 创建任何神经网络时需要的一些最重要的类和模块。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但是,这并不是说它仅针对初学者,因为 "},{"type":"text","marks":[{"type":"strong"}],"text":"我还将谈论"},{"type":"text","text":" "},{"type":"text","marks":[{"type":"strong"}],"text":"PyTorch提供的高可定制性,并谈论自定义的Layers,Datasets,Dataloaders和Loss函数"},{"type":"text","text":"。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"张量"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"张量是PyTorch的基本构建块,简单地说,它们是NumPy数组,但在GPU上。在这一部分中,我将列出一些在使用Tensors时可以使用的最常用的操作。这绝不是张量可以执行的详尽操作列表,但是在进行更令人兴奋的部分之前了解张量是有帮助的。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"1.创建张量"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我们可以通过多种方式创建PyTorch张量。这包括从NumPy数组转换为张量。下面只是一个要点,下面是一些示例,但是您可以  像使用NumPy数组一样使用张量来做更多的事情。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/e1/e1b264a6cf3ea1194952f9a360749ecb.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/8e/8e10ffaeaa154cd7296dfdb3315fd7a0.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"2.张量运算"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"同样,您可以对这些张量执行很多操作。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/47/474c4d2882275451e0697c63594d4d42.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/df/df83865162c05f4f3c07aa516f188593.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"注意: "},{"type":"text","text":"什么是PyTorch变量?在以前的Pytorch版本中,Tensor和Variables曾经是不同的,并且提供了不同的功能,但是现在不赞成使用Variable API ,并且所有用于Tensors的变量 方法都可以使用。因此,如果您不了解它们,那很好,因为它们不是必需的,如果您了解它们,则可以将它们忘记。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"nn.模块"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但是话又说回来,如果Pytorch没有提供很多现成的层,而这些层在各种神经网络体系结构中非常频繁地使用,则Pytorch不会被广泛使用。一些例子是:nn.Linear,nn.Conv2d,nn.MaxPool2d,nn.ReLU,  nn.BatchNorm2d,nn.Dropout,nn.Embedding,  ,,  ,,,nn.GRU/nn.LSTMnn.Softmaxnn.LogSoftmaxnn.MultiheadAttentionnn.TransformerEncodernn.TransformerDecoder"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/e2/e2551f8196a0cdc7e6e4311b0b635c18.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/2b/2bb2ad506c8331a273154851511fe975.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在这里,我们定义了一个非常简单的网络,该网络接受大小为784的输入,并以顺序方式将其通过两个线性层。但是要注意的是,我们可以在定义前向通过时定义任何类型的计算,这使得PyTorch高度可定制以用于研究目的。例如,在疯狂的实验模式下,我们可能使用了以下网络,在该网络上我们任意附加了图层。在这里,我们在将输入再次添加回第二个线性层(跳过连接)之后,将输出从第二个线性层再次发送回第一个线性层。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/41/41287ad11cdd33195570ba26fb3f62b5.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我们还可以检查神经网络正向传递是否起作用。通常,我首先创建一些随机输入,然后将其通过我创建的网络进行传递。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/5e/5e86a844a2d5c77760d5d24e35eab53f.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"关于层的一句话"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Pytorch非常强大,您实际上可以使用自己创建任何新的实验层 nn.Module。例如,而不是使用预定义的线性层 nn.Linear。从Pytorch以上,我们可以已经创建了 "},{"type":"text","marks":[{"type":"strong"}],"text":"定制线性层"},{"type":"text","text":"。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/9d/9dfa2a178151f62c0ffd2b74400e65bf.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"您将看到如何在中包装权重张量。nn.Parameter.这样做是为了使张量被视为模型参数。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"参数是 "},{"type":"text","marks":[{"type":"strong"}],"text":"Tensor"},{"type":"text","text":"子类,当与"},{"type":"text","marks":[{"type":"strong"}],"text":"Module"},{"type":"text","text":"-一起使用时具有非常特殊的属性 -当将它们分配为模块属性时,它们会自动添加到其参数列表中,并将出现在 "},{"type":"text","marks":[{"type":"strong"}],"text":"parameters()"},{"type":"text","text":"迭代器中。"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"稍后您将看到,model.parameters()迭代器将成为优化器的输入。但是稍后会更多。现在,我们现在可以在任何PyTorch网络中使用此自定义层,就像其他任何层一样。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/9e/9e723da2cbf8103d929828d5618c2dbf.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但是话又说回来,如果Pytorch没有提供很多现成的层,而这些层在各种神经网络体系结构中非常频繁地使用,则Pytorch不会被广泛使用。一些例子是:nn.Linear,nn.Conv2d,nn.MaxPool2d,nn.ReLU,  nn.BatchNorm2d,nn.Dropout,nn.Embedding,nn.GRU/nn.LSTM,nn.Softmax,nn.LogSoftmax,nn.MultiheadAttention,nn.TransformerEncoder,nn.TransformerDecoder"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"以上就是Torch的基础操作,下一篇文章会为同学们讲解卷积部分的操作。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章