GitVP开源文摘
全部文章/人工智能

PyTorch 中文手册(pytorch handbook)

pytorch handbook是一本开源的书籍,目标是帮助那些希望和使用PyTorch进行深度学习开发和研究的朋友快速入门,其中包含的Pytorch教程全部通过测试保证可以成功运行

作者zergtant 仓库zergtant/pytorch-handbook ↗ 星标★ 21,721 字数14,270 阅读1
GitHub 原文 ↗
摘要这是一本开源的书籍,目标是帮助那些希望和使用PyTorch进行深度学习开发和研究的朋友快速入门。

PyTorch 中文手册(pytorch handbook)

pytorch

书籍介绍

这是一本开源的书籍,目标是帮助那些希望和使用PyTorch进行深度学习开发和研究的朋友快速入门。

由于本人水平有限,在写此教程的时候参考了一些网上的资料,在这里对他们表示敬意,我会在每个引用中附上原文地址,方便大家参考。

深度学习的技术在飞速的发展,同时PyTorch也在不断更新,且本人会逐步完善相关内容。

版本说明

由于PyTorch版本更迭,教程的版本会与PyTorch版本,保持一致。

pytorch大版本更新的主要变动总结 当前版本 1.11

在线版本和PDF

国内的镜像,速度很快,不会被墙:https://www.pytorch.wiki/

PDF文件目前还没有找到好的生成方法,有熟悉这方面的朋友可以联系我,感激不尽

QQ 6群

群号:760443051

QR

点击链接加入群聊【PyTorch Handbook 交流6群】:https://jq.qq.com/?_wv=1027&k=X4Ro6uWv

1群(985896536)已满,2群(681980831) 3群(773681699)已满 4群(884017356)已满 5群(894059877)已满

不要再加了

新福利

公众账号每日分享干货文章 weixin QR

说明

  • 修改错别字请直接提issue或PR
  • PR时请注意版本
  • 有问题也请直接提issue

感谢

目录

第一章:PyTorch 入门

  1. PyTorch 简介
  2. PyTorch 环境搭建
  3. PyTorch 深度学习:60分钟快速入门(官方)
- [张量](https://raw.githubusercontent.com/zergtant/pytorch-handbook/HEAD/chapter1/1_tensor_tutorial.ipynb)
- [Autograd:自动求导](https://raw.githubusercontent.com/zergtant/pytorch-handbook/HEAD/chapter1/2_autograd_tutorial.ipynb) 
- [神经网络](https://raw.githubusercontent.com/zergtant/pytorch-handbook/HEAD/chapter1/3_neural_networks_tutorial.ipynb)
- [训练一个分类器](https://raw.githubusercontent.com/zergtant/pytorch-handbook/HEAD/chapter1/4_cifar10_tutorial.ipynb)
- [选读:数据并行处理(多GPU)](https://raw.githubusercontent.com/zergtant/pytorch-handbook/HEAD/chapter1/5_data_parallel_tutorial.ipynb)
  1. 相关资源介绍

第二章 基础

第一节 PyTorch 基础

  1. 张量
  2. 自动求导
  3. 神经网络包nn和优化器optm
  4. 数据的加载和预处理

第二节 深度学习基础及数学原理

深度学习基础及数学原理

第三节 神经网络简介

神经网络简介 注:本章在本地使用微软的Edge打开会崩溃,请使Chrome Firefox打开查看

第四节 卷积神经网络

卷积神经网络

第五节 循环神经网络

循环神经网络

第三章 实践

第一节 logistic回归二元分类

logistic回归二元分类

第二节 CNN:MNIST数据集手写数字识别

CNN:MNIST数据集手写数字识别

第三节 RNN实例:通过Sin预测Cos

RNN实例:通过Sin预测Cos

第四章 提高

第一节 Fine-tuning

Fine-tuning

第二节 可视化

visdom

tensorboardx

可视化理解卷积神经网络

第三节 Fast.ai

Fast.ai

第四节 训练的一些技巧

第五节 多GPU并行训练

多GPU并行计算

补充翻译文章:在PyTorch中使用DistributedDataParallel进行多GPU分布式模型训练

在PyTorch中使用DistributedDataParallel进行多GPU分布式模型训练

第五章 应用

第一节 Kaggle介绍

Kaggle介绍

第二节 结构化数据

Pytorch处理结构化数据

第三节 计算机视觉

Fashion MNIST 图像分类

第四节 自然语言处理

第五节 协同过滤

第六章 资源

torchaudio

第七章 附录

树莓派编译安装 pytorch 1.4

transforms的常用操作总结

pytorch的损失函数总结

pytorch的优化器总结

Script

script目录是我写的将ipynb转换成在线的版本和pdf文件的脚本,因为还在测试阶段,所以有什么问题请大家提出

License

本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行许可


1 pytorch introduction

1.1 Pytorch 简介

1.1.1 PyTorch的由来

很多人都会拿PyTorch和Google的Tensorflow进行比较,这个肯定是没有问题的,因为他们是最火的两个深度学习框架了。但是说到PyTorch,其实应该先说Torch。

1.1.2 Torch是什么?

Torch英译中:火炬

A Tensor library like Numpy, unlike Numpy it has strong GPU support. Lua is a wrapper for Torch (Yes! you need to have a good understanding of Lua), and for that you will need LuaRocks package manager.

1

Torch是一个与Numpy类似的张量(Tensor)操作库,与Numpy不同的是Torch对GPU支持的很好,Lua是Torch的上层包装。

Torch is not going anywhere. PyTorch and Torch use the same C libraries that contain all the performance: TH, THC, THNN, THCUNN and they will continue to be shared.
We still and will have continued engineering on Torch itself, and we have no immediate plan to remove that.

2

PyTorch和Torch使用包含所有相同性能的C库:TH, THC, THNN, THCUNN,并且它们将继续共享这些库。

这样的回答就很明确了,其实PyTorch和Torch都使用的是相同的底层,只是使用了不同的上层包装语言。

注:LUA虽然快,但是太小众了,所以才会有PyTorch的出现。

1.1.3 重新介绍 PyTorch

PyTorch is an open source machine learning library for Python, based on Torch, used for applications such as natural language processing. It is primarily developed by Facebook's artificial-intelligence research group, and Uber's "Pyro" software for probabilistic programming is built on it. 

3

PyTorch是一个基于Torch的Python开源机器学习库,用于自然语言处理等应用程序。 它主要由Facebook的人工智能研究小组开发。Uber的"Pyro"也是使用的这个库。

PyTorch is a Python package that provides two high-level features:
    Tensor computation (like NumPy) with strong GPU acceleration
    Deep neural networks built on a tape-based autograd system
You can reuse your favorite Python packages such as NumPy, SciPy and Cython to extend PyTorch when needed.

4

PyTorch是一个Python包,提供两个高级功能:

  • 具有强大的GPU加速的张量计算(如NumPy)
  • 包含自动求导系统的的深度神经网络

1.1.4 对比PyTorch和Tensorflow

没有好的框架,只有合适的框架, 这篇知乎文章有个简单的对比,所以这里就不详细再说了。 并且技术是发展的,知乎上的对比也不是绝对的,比如Tensorflow在1.5版的时候就引入了Eager Execution机制实现了动态图,PyTorch的可视化,windows支持,沿维翻转张量等问题都已经不是问题了。

1.1.5 再次总结

  • PyTorch算是相当简洁优雅且高效快速的框架
  • 设计追求最少的封装,尽量避免重复造轮子
  • 算是所有的框架中面向对象设计的最优雅的一个,设计最符合人们的思维,它让用户尽可能地专注于实现自己的想法
  • 大佬支持,与google的Tensorflow类似,FAIR的支持足以确保PyTorch获得持续的开发更新
  • 不错的的文档(相比FB的其他项目,PyTorch的文档简直算是完善了,参考Thrift),PyTorch作者亲自维护的论坛 供用户交流和求教问题
  • 入门简单

所以如果以上信息有吸引你的内容,那么请一定要读完这本书:)


2 pytorch installation

1.2 Pytorch环境搭建

PyTorch的安装十分简单,根据PyTorch官网,对系统选择和安装方式等灵活选择即可。 这里以anaconda为例,简单的说一下步骤和要点。 国内安装anaconda建议使用清华镜像。

前些日子,由于合规问题中科大、清华镜像都已经关闭。目前只有清华镜像恢复,所以目前可以继续使用

1.2.1 安装Pytorch

pytorch的安装经过了几次变化,请大家以官网的安装命令为准。另外需要说明的就是在1.2版本以后,pytorch只支持cuda 9.2以上了,所以需要对cuda进行升级,目前测试大部分显卡都可以用,包括笔记本的MX250也是可以顺利升级到cuda 10.1。

我个人测试使用官网的安装命令进行安装时并不能安装1.3版原因未知(如果大家conda安装也有问题可以一起讨论下原因),所以这里建议大家使用pip进行安装,经过测试 pip是没有任何问题的。

目前(2020/7)的稳定版本为1.5.1。

#默认 使用 cuda10.2
pip3 install torch===1.5.1 torchvision===0.6.1 -f https://download.pytorch.org/whl/torch_stable.html

#cuda 9.2
pip3 install torch==1.5.1+cu92 torchvision==0.6.1+cu92 -f https://download.pytorch.org/whl/torch_stable.html

#cpu版本
pip install torch==1.5.1+cpu torchvision==0.6.1+cpu -f https://download.pytorch.org/whl/torch_stable.html

验证输入python 进入

import torch
torch.__version__
# 得到结果'1.5.0'

1.2.2 配置 Jupyter Notebook

新建的环境是没有安装 ipykernel 的, 所以无法注册到Jupyter Notebook中,先要准备下环境

#安装ipykernel
conda install ipykernel
#写入环境
python -m ipykernel install  --name pytorch --display-name "Pytorch for Deeplearning"

下一步就是定制 Jupyter Notebook

#切换回基础环境
activate base
#创建jupyter notebook配置文件
jupyter notebook --generate-config
## 这里会显示创建jupyter_notebook_config.py的具体位置

打开文件,修改

c.NotebookApp.notebook_dir = '' 默认目录位置
c.NotebookApp.iopub_data_rate_limit = 100000000 这个改大一些否则有可能报错

1.2.3 测试

至此 Pytorch 的开发环境安装完成,可以在开始菜单中打开Jupyter Notebook 在New 菜单中创建文件时选择Pytorch for Deeplearning 创建PyTorch的相关开发环境了

1.2.4 问题解决

问题1:启动python提示编码错误

删除 .python_history 来源

问题2 默认目录设置不起效

打开快捷方式,看看快捷方式是否跟这个截图一样,如果是则删除 %USERPROFILE% 改参数会覆盖掉notebook_dir设置,导致配置不起效

Alt text

如果你还发现其他问题,请直接留言


3 deep learning with pytorch 60 minute blitz

PyTorch 深度学习:60分钟快速入门 (官方)

本章为官方网站的 [Deep Learning with PyTorch: A 60 Minute Blitz] (https://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html) 的中文翻译,目前在网上看到所有中文翻译版本都已经过时了,所以才又重新翻译了一遍,确保与官方同步

目录

  1. 张量
  2. Autograd: 自动求导 本章是冲突的重灾区,建议阅读
  3. 神经网络
  4. 训练一个分类器
  5. 选读:数据并行处理(多GPU)

说明

本章中的所有图片均来自于PyTorch官网,版权归PyTorch所有.


1 kaggle

5.1 kaggle介绍

5.1.1 Kaggle

平台简介

Kaggle是由联合创始人、首席执行官安东尼·高德布卢姆(Anthony Goldbloom)2010年在墨尔本创立的,主要为开发商和数据科学家提供举办机器学习竞赛、托管数据库、编写和分享代码的平台。该平台已经吸引了80万名数据科学家的关注,这些用户资源或许正是吸引谷歌的主要因素。

本段摘自百度百科

通俗的说,Kaggle上面有着各种高质量的数据集,并且基于这些数据集会有一些大的公司进行赞助,来举办一些算法的竞赛,在竞赛时还可通过社区进行讨论(包括比赛中的分享、答疑,和比赛后的top solution分享)。这样就使得全球的顶尖高手会对参加比赛产生兴趣,因为收获到的不仅有奖金还有名气。同时kaggle对萌新也很友好,在社区中可以学到很多的知识和解决方案(top solution)。

比赛介绍

kaggle 网站是纯英文的,我们可以把比赛分为2类:

  1. 竞赛competitions:竞赛的目的很简单,就是要求在指定时间内(一般是2-3个月)使用出题方的数据完成指定的任务,如果有幸赢得比赛,不但可以获得奖金,模型也可能会被竞赛赞助商应用到商业实践中、获奖者直接进入赞助企业工作或者获得一些重大会议邀请、发表论文等
  2. 数据集datasets:数据集是赞助商为了解决某些问题,免费公开了自己的内部的一些脱敏的数据,所有人都可以使用这些数据集进行研究,来改进现有的模型或者优化现有问题的解决方案,但是这些模型或解决方案可以不公开,所以这部分是不提供奖金的,只是能够与别人的方案做对比。

5.1.2 Kaggle板块介绍

Data

这个不用多介绍,就是我们所使用的数据。

这个模块需要认值阅读,它介绍数据的产生方式、存储形式、每个字段的含义等。如果数据规模很大,你没有内存足够大的服务器可以hold住,可能就没法打这个比赛或者使用这个数据集;我们还要注意他的数据类型什么,比如图像数据那就得用深度神经网络,如果对这方面不熟或者没有GPU可用,肯定是没有办法参加这个比赛,不要妄想使用CPU来做CNN计算,至少目前来说是不可能的。 我们可将 kaggle 平台上的比赛分成一下4类:

  1. 挖掘:面对的是结构化数据,也就是表格数据,包括了各式各样的预测问题(预测销量、点击率、推荐排序等),主要的共性就是理解数据,理解问题,从数据中找到有用的信息用来预测,这类问题胜负更多的是在特征上,所以这部分是树形模型的天下比如有名的xgboost。
  2. 图像:图像的话那肯定需要CNN了,这部分虽然可以用迁移学习来做,但是要想获得排名大量的算力也是必须的,因为要验证微调的次数也会很多。
  3. 语音:这部分不太了解,就不献丑了
  4. NLP :BERT出来以后各种预训练的权重会对这方面的比赛帮助很大

Rules

比赛规则。这个必须要看,无论是萌新还是大神,比赛的规则还是要遵守的。

提交次数:这里会写明每天允许的最大提交次数,一般是 5次,假如一个比赛持续时间是三个月,那么总提交次数差不多就是 5×90=450 次。

很多人为了躲过提交次数的限制或者“节省提交次数”,专门注册了小号,这被称为 multiple accounts,是会被 kaggle 的反作弊系统侦察出来的。在比赛结束后,会先公布初步排名,然后 kaggle 平台反作弊系统开始运行,大约两三天后,凡是被判为作弊的队伍直接从排名中移除,几个月的努力就打水漂了!所以这个操作一定要禁止。

另一个是组外私自分享代码和结果,这也是明令禁止的。组队之后队员之间可以分享,或者通过公开的 kernel或discussion区分享。同样,如果被检测出不同队伍或个人间有相似的结果,也会被移除最终榜单。

Team

在参加比赛的时候可以向别人发起组队邀请,或者接受别人的邀请,三个臭皮匠顶个诸葛亮,组队的好处就不用说了,每个队伍最多4个人,并且是可以共享代码的,这样相当于算力提高了4倍。

另外就是一定要给队伍起个骚气的名字。

Kernels

。。。(不知道怎么翻译,总之就是核心代码)。支持 Python 语言的脚本 .py 和 .ipynb,和 R 语言的脚本 .R 和 .ipynb。

分 public kernel 和 private kernel。

public kernel是公开的,大家都可以看到,从这里可以学到非常多的东西,当然你自己也可以通过公开自己的 kernel 分享解决方案或观点。

private kernel是你自己的,别人看不见,你可以分享给组内成员。

为方便大家打比赛,kaggle 提供了一些运算资源。kaggle 用户的每个 kernel 可以有 16G 的内存和 4 核CPU,这足够打多数比赛了。另外,提供了 GPU,在新建 kernel 的时候可以选择开启 GPU,但当打开 GPU 时,CPU 和内存资源会少一些,这个后面的薅羊毛指南中会详细介绍。

Discussion

讨论区,这个区大家会分享观点、讨论问题、甚至寻找组队队友。

kaggle 的分享氛围非常好,对萌新也非常友好。在整个比赛进程中大家不断地分享自己的新发现,很多有用的信息都是在这里获取的。 对于一个新手而言,每天做好 kernel 区和 discussion区的跟踪,有充足的时间尝试他们的想法,应该可以获得一个不错的排名。 比赛结束后,一些大牛甚至会将自己获胜用到的方法、小技巧(tricks)全部分享出来。

Leaderboard

排名区,分 public LB 和 private LB。比赛方会将 test 数据集中一部分(比如 30%)拿出来做为 public LB 评分和排名,剩下的部分作为 private LB(也就是最终结果)的评分和排名。

你每天都可以提交并查看自己的答案在 public LB 的得分和排名情况,在比赛结束前需要选择两个提交作为自己的最终答案,比赛结束后,平台会计算你的答案的 private LB 得分并自动挑选得分高的一个作为你的最终成绩。

在讨论区你会经常听到大家讨论 CV score、LB score,指的就是你模型本地交叉验证的得分和提交后的 public LB 得分。

shake up:public LB 得分可能会和 private LB 得分差别很大,比赛结果公布前你可能排名前十,比赛结果公布后发现自己跌到上千名了,这就是所谓的 shake up,一般是模型过拟合了,这个需要在训练的时候就要注意。

5.1.3 Kaggle竞赛的排名机制

一般情况下,都是以准确率为导向的排名,毕竟我们的模型计算的准确是第一标准。

针对于比赛而言,在比赛结束之前,参赛者每天最多可以提交5次测试集的预测结果。每一次提交结果都会获得最新的临时排名成绩,直至比赛结束获得最终排名,Kaggle将参赛者每次提交的结果取出25%-33%,并依照准确率进行临时排名。在比赛结束时,参赛者可以指定几个已经提交的结果,Kaggle从中去除之前用于临时排名的部分,用剩余数据的准确率综合得到最终排名。

所以,比赛过程中用于最终排名的那部分数据,参赛者是始终得不到关于准确率的反馈的。这样一定程度避免参赛模型的过拟合,保证评选出兼顾准确率和泛化能力的模型。

5.1.4 Kaggle薅羊毛指南

Kaggle提供免费访问内核中的NVidia K80 GPU。我的个人理解相当于1060或者1070的水平吧。 我们可以在Kernel的界面右侧底端,Setting选项中将GPU开启,这样就可以使用免费的GPU资源了

GPU设置

Kaggle只提供6小时的连续GPU使用时间,虽然对于大数据量计算来说根本就不够用,但是对于研究,这些已经够了,例如我们在图像识别中经常用到的CIFAR-10 图片分类,一般训练2个小时左右就能够得到比较准确的模型了,这对于入门学习来说已经沟通了。

更新:现在Kaggle提供的GPU为 P100,限制为,每周免费使用30小时,还可以连接google的colab,这样对于我们学习和测试,绝对是足够了。

5.1.5 其他的一些数据竞赛平台

除了Kaggle,其实还有不少类似的平台;

[DrivenData]( https://www.drivendata.org/)

[CrowdANALYTIX]( https://www.crowdanalytix.com/community)

[InnoCentive]( https://www.innocentive.com/our-solvers/)

[TundIT]( https://towardsdatascience.com/top-competitive-data-science-platforms-other-than-kaggle-2995e9dad93c)

[Codalab]( https://competitions.codalab.org/)

[Analytics Vidhya]( https://datahack.analyticsvidhya.com/)

[CrowdAI]( https://www.crowdai.org/challenges)

[Numerai]( https://numer.ai/rounds)

[Data Science Challenge]( https://www.datasciencechallenge.org/)

[KDD Cup]( https://www.kdd.org/kdd2019/kdd-cup)

[天池]( https://tianchi.aliyun.com/competition/gameList/activeList)

[腾讯广告算法大赛]( https://algo.qq.com)

本文由 GitVP 从 GitHub 收录并在站内全文呈现,版权归原作者所有。

← 回到全部文章

同分类还有