PyTorch 深度学习框架:优雅而简洁的代码实现

Posted 程序猿-饭饭

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PyTorch 深度学习框架:优雅而简洁的代码实现相关的知识,希望对你有一定的参考价值。

 PyTorch 是由 Facebook 发布的深度学习框架,旨在为研究人员和工程师提供快速、灵活和简单的实验平台。与其他框架相比,PyTorch 具有简洁的 API 和灵活的动态计算图,使得构建和训练深度神经网络变得更加优雅和简洁。本文将介绍 PyTorch 的基本原理和使用方法,以及如何在 PyTorch 中实现常见的深度学习模型。

PyTorch 的基本原理

PyTorch 的核心是张量(Tensor)类,它是 Numpy 数组的扩展,支持 GPU 计算和自动微分。PyTorch 中的张量类似于 Numpy 中的 ndarray,但它还支持自动微分。自动微分是指,PyTorch 可以自动地计算张量上的梯度,这是实现深度学习的基础之一。

PyTorch 的动态计算图也是其特点之一。传统的深度学习框架(如 TensorFlow)采用静态计算图,即先定义计算图的结构,然后再将数据传入计算图进行计算。而 PyTorch 采用动态计算图,即每次计算都重新构建计算图。动态计算图的好处是,它可以处理各种动态结构,如可变长度的序列,同时也使得模型构建更加灵活。

PyTorch 的使用方法

使用 PyTorch 构建深度学习模型通常需要以下步骤:

  1. 定义模型:使用 PyTorch 的 nn 模块定义模型结构,例如卷积神经网络(CNN)、循环神经网络(RNN)等。

  2. 定义损失函数:使用 PyTorch 的 nn 模块定义损失函数,例如交叉熵损失函数、均方误差损失函数等。

  3. 定义优化器:使用 PyTorch 的 optim 模块定义优化器,例如随机梯度下降(SGD)、Adam 等。

  4. 训练模型:将数据传入模型进行训练,使用定义的优化器来更新模型参数,最小化损失函数。

  5. 测试模型:将测试数据传入模型进行测试,计算模型的准确率、精度等指标。

以下是使用 PyTorch 实现一个简单的全连接神经网络的示例代码:

import torch
import torch.nn as nn
import torch.optim as optim

# 定义模型
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(784,

PyTorch是一个非常流行的深度学习框架,它为研究人员和开发者提供了一个灵活且高效的平台,用于构建各种类型的神经网络和深度学习模型。在本文中,我们将探讨PyTorch的一些关键特性和使用方法,以及如何使用它来构建神经网络。

PyTorch是由Facebook开发的Python深度学习框架,它与其他深度学习框架相比具有许多独特的特点。PyTorch的一个显著特点是它使用动态计算图,这意味着我们可以轻松地构建动态的、变化的神经网络,而不需要事先定义完整的计算图。这使得PyTorch非常适合在实验阶段进行快速迭代和试验。此外,PyTorch还提供了广泛的预训练模型,这些模型可以在各种类型的深度学习任务中使用。

为了开始使用PyTorch,我们需要安装它并熟悉它的基本功能。PyTorch支持Python和C++,但我们将重点关注Python。首先,我们需要安装PyTorch,可以使用pip安装,也可以通过Anaconda安装。

在安装完成后,我们可以开始创建一个神经网络模型。在PyTorch中,我们可以通过子类化nn.Module类来创建自定义模型。在自定义模型中,我们需要定义模型的构建函数和前向传递函数。构建函数用于定义模型的各个组件,如卷积层、线性层和池化层。前向传递函数定义了数据在模型中的流动方式。在前向传递函数中,我们可以使用PyTorch提供的各种函数和工具,如卷积函数、池化函数、Dropout函数等等。

PyTorch还提供了许多有用的工具和函数,可以帮助我们对数据进行预处理和转换。例如,我们可以使用torchvision库来加载和处理图像数据集。此外,PyTorch还提供了许多优化器,如Adam优化器、SGD优化器等,可以用于训练神经网络模型。

总的来说,PyTorch是一个功能强大且灵活的深度学习框架,可以用于构建各种类型的神经网络和深度学习模型。它使用动态计算图和广泛的预训练模型,使得在实验阶段进行快速迭代和试验变得非常容易。

书籍深度学习框架:PyTorch入门与实践(附代码)

【导读】2016年是属于TensorFlow的一年,凭借谷歌的大力推广,TensorFlow占据了各大媒体的头条。2017年年初,PyTorch的横空出世吸引了研究人员极大的关注,PyTorch简洁优雅的设计、统一易用的接口、追风逐电的速度和变化无方的灵活性给人留下深刻的印象。作为一门2017年刚刚发布的深度学习框架,研究人员所能获取的学习资料有限,中文资料更是比较少。本书作者长期关注PyTorch发展,经常在论坛上帮助PyTorch新手解决问题,在平时的科研中利用PyTorch进行各个方面的研究,有着丰富的使用经验。看到国内的用户对PyTorch十分感兴趣,迫切需要一本能够全面讲解PyTorch的书籍,于是本书就这么诞生了。专知内容组编辑整理。


图书介绍



关于该书

《深度学习框架PyTorch:入门与实践》从多维数组Tensor开始,循序渐进地带领读者了解PyTorch各方面的基础知识。结合基础知识和前沿研究,带领读者从零开始完成几个经典有趣的深度学习小项目,包括GAN生成动漫头像、AI滤镜、AI写诗等。《深度学习框架PyTorch:入门与实践》没有简单机械地介绍各个函数接口的使用,而是尝试分门别类、循序渐进地向读者介绍PyTorch的知识,希望读者对PyTorch有一个完整的认识。


《深度学习框架PyTorch:入门与实践》内容由浅入深,无论是深度学习的初学者,还是头次接触PyTorch的研究人员,都能在学习本书的过程中快速掌握PyTorch。即使是有一定PyTorch使用经验的用户,也能够从本书中获得对PyTorch不一样的理解。


关于读者

主要为机器学习和深度学习专业人员,软件开发人员,研究生和开源爱好者。


关于作者

陈云:Python程序员、Linux爱好者和PyTorch源码贡献者。主要研究方向包括计算机视觉和机器学习。“2017知乎看山杯机器学习挑战赛”一等奖,“2017天池医疗AI大赛”第八名。 热衷于推广PyTorch,并有丰富的使用经验,活跃于PyTorch论坛和知乎相关板块。

GitHub代码




代码链接:

https://github.com/chenyuntc/PyTorch-book


这是书籍《深度学习框架PyTorch:入门与实践》的对应代码,但是也可以作为一个独立的PyTorch入门指南和教程。

该书(教程/仓库)的内容如图所示: 

【书籍】深度学习框架:PyTorch入门与实践(附代码)

可以看出本教程可以分为两部分:

基础部分(前五章)讲解PyTorch内容,这部份介绍了PyTorch中主要的的模块,和深度学习中常用的一些工具。对于这部分内容,这里利用Jupyter Notebook作为教学工具,读者可以结合notebook修改运行,反复实验。


  • 第二章介绍如何安装PyTorch和配置学习环境。同时提供了一个快速入门教程,基于官方的教程简化并更新内容,读者可以花费大约1到2小时的时间快速完成入门任务,而后根据需求再选择深入阅读后续相关章节的内容。

  • 第三章介绍了PyTorch中多维数组Tensor和动态图autograd/Variable的使用,并配以例子,让读者分别使用Tensor和autograd实现线性回归,比较二者的不同点。除了介绍这二者的基础使用之外,本章还对Tensor的底层设计,以及autograd的计算图原理进行比较深入分析,希望能使得读者能对这些底层知识有更全面的掌握。

  • 第四章介绍了PyTorch中神经网络模块nn的基础用法,同时讲解了神经网络中“层”,“损失函数”,“优化器”等,最后带领读者用不到50行的代码搭建出曾夺得ImageNet冠军的ResNet。

  • 第五章介绍了PyTorch中数据加载,GPU加速,持久化和可视化等相关工具。


实战部分(第六到十章)利用PyTorch实现了几个酷炫有趣的应用,对于这部分的内容,本仓库给出完整的实现代码,并提供预训练好的模型作为demo,供读者测试。


  • 第六章是承上启下的一章,这一章的目标不是教会读者新函数,新知识,而是结合Kaggle中一个经典的比赛,实现一个深度学习中比较简单的图像二分类问题。在实现过程中,带领读者复习前五章的知识,并提出代码规范以合理的组织程序,代码,使得程序更加可读,可维护。第六章还介绍了在PyTorch中如何进行debug。

  • 第七章为读者讲解了当前最火爆的生成对抗网络(GAN),带领读者从头实现一个动漫头像生成器,能够利用GAN生成风格多变的动漫头像。

  • 第八章为读者讲解了风格迁移的相关知识,并带领读者实现风格迁移网络,将自己的照片变成高大上的名画。

  • 第九章为读者讲解了一些自然语言处理的基础知识,并讲解了CharRNN的原理。而后利用收集了几万首唐诗,训练出了一个可以自动写诗歌的小程序。这个小程序可以控制生成诗歌的格式,意境,还能生成藏头诗。

  • 第十章为读者介绍了图像描述任务,并以最新的AI Challenger比赛的数据为例,带领读者实现了一个可以进行简单图像描述的的小程序。


Notebook中的文字描述内容属于本书的初稿,有描述不通顺,错别字之处还请谅解。本打算删除notebook中描述的内容,只留下代码,但为了方便读者阅读学习,最终还是决定留下。 我会抽空根据书中内容逐字校对这部分内容,但并不对此并不提供具体时间点。

是否需要买书

书不是必要的,这个仓库包含书中50%以上的文字内容,90%以上的代码,尤其是前几章入门内容,几乎是完全保留了书中的讲解内容。读者即使不买书也能正常使用本教程。

但纸质书有如下优势:

  • 更流畅的体验: 书中的文字,描述,内容经过多人反复校对审查所得,所以描述更自然,错误更少,排版更美观。这个仓库中的Jupyter Notebook中的内容属于本书的初稿,因此有不少描述不通顺,错别字,错误之处。

  • 更好的排版:Jupyter Notebook虽然支持markdown,但是排版比较别扭,而书中的排版有严格的规范。

  • 更完整的内容,更丰富的插图,更详细代码说明:尤其是实战部分,有对于代码设计的说明,原理的讲解,模型的介绍,结合书中内容会更好的理解代码。

  • 有纸质书在手,可以快速翻阅查找。

如果你觉得纸质书的优势吸引你,不妨小破费一笔,支持一下作者这大半年来的工作。同时为了尽可能的方便读者,笔者还专门开通腾讯云的服务,用以保存教程中用到的部分模型,预处理的数据和部分大文件。

代码说明

  • 教程代码同时在Python2和Python3下测试通过

  • 实战部分代码还同时在GPU和CPU环境下测试通过

  • 所有的代码都是基于最新版的PyTorch 0.2.0,本人承诺会至少维护代码更新兼容到PyTorch 0.4

如果有任何不当,或者有待改进的地方,欢迎读者开issue讨论,或者提交pull request。

环境配置

  1. 安装PyTorch,请从官网选择指定的版本安装即可,一键安装(即使你使用anaconda,也建议使用pip)。更多的安装方式请参阅书中说明。

  2. 克隆仓库

    git clone https://github.com/chenyuntc/PyTorch-book.git
  3. 安装第三方依赖包

    cd pytorch-book && pip install -r requirements.txt

Visdom打不开及其解决方案

教程中用到了Visdom作为可视化工具,但是最近发现visdom 不能用了,打开之后网页一片空白,经过抓包分析发现是两个js文件被防火墙给阻挡了:

  • https://cdn.rawgit.com/plotly/plotly.js/master/dist/plotly.min.js

  • https://cdn.rawgit.com/STRML/react-grid-layout/0.14.0/dist/react-grid-layout.min.js

这里本人提供一个比较简单的解决方法:

  • Step 1: 找到系统使用visdom的index.html文件,

    locate visdom/static/index.html

    输出 系统中visdom 的html文件:

    /usr/local/lib/python2.7/dist-packages/visdom/static/index.html
    /usr/local/lib/python3.5/dist-packages/visdom/static/index.html
  • Step 2:下载本人修改过后的文件,替换step1 找到的index.html, 可能需要root权限。

这时候再刷新浏览器,就能发现visdom正常显示了。

还有其它的解决方法,包括:

  • 下载这两个文件到本地,然后修改index.html中都应js文件的路径

  • 使用代理,但是把某些域名加入白名单


参考链接:

https://github.com/chenyuntc/PyTorch-book

https://item.jd.com/12261129.html

-END-

专 · 知

人工智能领域主题知识资料查看获取

同时欢迎各位用户进行专知投稿,详情请点击

请PC登录www.zhuanzhi.ai或者点击阅读原文,注册登录专知,获取更多AI知识资料

请加专知小助手微信(Rancho_Fang),加入专知主题人工智能群交流!

点击“阅读原文”,使用专知!

以上是关于PyTorch 深度学习框架:优雅而简洁的代码实现的主要内容,如果未能解决你的问题,请参考以下文章

《动手学深度学习》线性回归的简洁实现(linear-regression-pytorch)

《动手学深度学习》线性回归的简洁实现(linear-regression-pytorch)

荐书丨深度学习框架PyTorch:入门与实践

深度学习框架如何优雅的做算子对齐任务?

深度学习框架如何优雅的做算子对齐任务?

PyTorch深度学习实战 | 自然语言处理与强化学习