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

书籍介绍
这是一本开源的书籍,目标是帮助那些希望和使用PyTorch进行深度学习开发和研究的朋友快速入门。
由于本人水平有限,在写此教程的时候参考了一些网上的资料,在这里对他们表示敬意,我会在每个引用中附上原文地址,方便大家参考。
深度学习的技术在飞速的发展,同时PyTorch也在不断更新,且本人会逐步完善相关内容。
版本说明
由于PyTorch版本更迭,教程的版本会与PyTorch版本,保持一致。
pytorch大版本更新的主要变动总结 当前版本 1.11
在线版本和PDF
国内的镜像,速度很快,不会被墙:https://www.pytorch.wiki/
PDF文件目前还没有找到好的生成方法,有熟悉这方面的朋友可以联系我,感激不尽
QQ 6群
群号:760443051
点击链接加入群聊【PyTorch Handbook 交流6群】:https://jq.qq.com/?_wv=1027&k=X4Ro6uWv
1群(985896536)已满,2群(681980831) 3群(773681699)已满 4群(884017356)已满 5群(894059877)已满
不要再加了
新福利
公众账号每日分享干货文章
说明
- 修改错别字请直接提issue或PR
- PR时请注意版本
- 有问题也请直接提issue
感谢
目录
第一章:PyTorch 入门
- [张量](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)
第二章 基础
第一节 PyTorch 基础
第二节 深度学习基础及数学原理
第三节 神经网络简介
神经网络简介 注:本章在本地使用微软的Edge打开会崩溃,请使Chrome Firefox打开查看
第四节 卷积神经网络
第五节 循环神经网络
第三章 实践
第一节 logistic回归二元分类
第二节 CNN:MNIST数据集手写数字识别
第三节 RNN实例:通过Sin预测Cos
第四章 提高
第一节 Fine-tuning
第二节 可视化
第三节 Fast.ai
第四节 训练的一些技巧
第五节 多GPU并行训练
补充翻译文章:在PyTorch中使用DistributedDataParallel进行多GPU分布式模型训练
在PyTorch中使用DistributedDataParallel进行多GPU分布式模型训练
第五章 应用
第一节 Kaggle介绍
第二节 结构化数据
第三节 计算机视觉
第四节 自然语言处理
第五节 协同过滤
第六章 资源
第七章 附录
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.
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.
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.
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.
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设置,导致配置不起效

如果你还发现其他问题,请直接留言
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) 的中文翻译,目前在网上看到所有中文翻译版本都已经过时了,所以才又重新翻译了一遍,确保与官方同步
目录
- 张量
- Autograd: 自动求导 本章是冲突的重灾区,建议阅读
- 神经网络
- 训练一个分类器
- 选读:数据并行处理(多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类:
- 竞赛competitions:竞赛的目的很简单,就是要求在指定时间内(一般是2-3个月)使用出题方的数据完成指定的任务,如果有幸赢得比赛,不但可以获得奖金,模型也可能会被竞赛赞助商应用到商业实践中、获奖者直接进入赞助企业工作或者获得一些重大会议邀请、发表论文等
- 数据集datasets:数据集是赞助商为了解决某些问题,免费公开了自己的内部的一些脱敏的数据,所有人都可以使用这些数据集进行研究,来改进现有的模型或者优化现有问题的解决方案,但是这些模型或解决方案可以不公开,所以这部分是不提供奖金的,只是能够与别人的方案做对比。
5.1.2 Kaggle板块介绍
Data
这个不用多介绍,就是我们所使用的数据。
这个模块需要认值阅读,它介绍数据的产生方式、存储形式、每个字段的含义等。如果数据规模很大,你没有内存足够大的服务器可以hold住,可能就没法打这个比赛或者使用这个数据集;我们还要注意他的数据类型什么,比如图像数据那就得用深度神经网络,如果对这方面不熟或者没有GPU可用,肯定是没有办法参加这个比赛,不要妄想使用CPU来做CNN计算,至少目前来说是不可能的。 我们可将 kaggle 平台上的比赛分成一下4类:
- 挖掘:面对的是结构化数据,也就是表格数据,包括了各式各样的预测问题(预测销量、点击率、推荐排序等),主要的共性就是理解数据,理解问题,从数据中找到有用的信息用来预测,这类问题胜负更多的是在特征上,所以这部分是树形模型的天下比如有名的xgboost。
- 图像:图像的话那肯定需要CNN了,这部分虽然可以用迁移学习来做,但是要想获得排名大量的算力也是必须的,因为要验证微调的次数也会很多。
- 语音:这部分不太了解,就不献丑了
- 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资源了

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)