Giter VIP home page Giter VIP logo

thorough-pytorch's Introduction

深入浅出PyTorch

Important

在线阅读地址 | 配套视频教程 | 智海(国家级AI科教平台)

请注意:在线文档更新落后于主仓库更新,建议看source文件夹下的markdown文件

一、项目初衷

PyTorch是利用深度学习进行数据科学研究的重要工具,在灵活性、可读性和性能上都具备相当的优势,近年来已成为学术界实现深度学习算法最常用的框架。

考虑到PyTorch的学习兼具理论储备和动手训练,两手都要抓两手都要硬的特点,我们开发了《深入浅出PyTorch》课程,期望以组队学习的形式,帮助大家从入门到熟练掌握PyTorch工具,进而实现自己的深度学习算法。

我们的愿景是:通过组队学习,大家能够掌握由浅入深地PyTorch的基本知识和内容,经过自己的动手实践加深操作的熟练度。同时通过项目实战,充分锻炼编程能力,掌握PyTorch进行深度学习的基本流程,提升解决实际问题的能力。

学习的先修要求是,会使用Python编程,了解包括神经网络在内的机器学习算法,勤于动手实践。

《深入浅出PyTorch》是一个系列,一共有三个部分。已经上线的是本系列的第一、二部分,后续会不断更新《深入浅出PyTorch》(下),给出更贴合实际应用的实战案例。

二、内容简介

  • 第零章:前置知识(选学)
    • 人工智能简史
    • 相关评价指标
    • 常用包的学习
    • Jupyter相关操作
  • 第一章:PyTorch的简介和安装
    • PyTorch简介
    • PyTorch的安装
    • PyTorch相关资源简介
  • 第二章:PyTorch基础知识
    • 张量及其运算
    • 自动求导简介
    • 并行计算、CUDA和cuDNN简介
  • 第三章:PyTorch的主要组成模块
    • 思考:完成一套深度学习流程需要哪些关键环节
    • 基本配置
    • 数据读入
    • 模型构建
    • 损失函数
    • 优化器
    • 训练和评估
    • 可视化
  • 第四章:PyTorch基础实战
    • 基础实战——Fashion-MNIST时装分类
    • 基础实战——果蔬分类实战(notebook)
  • 第五章:PyTorch模型定义
    • 模型定义方式
    • 利用模型块快速搭建复杂网络
    • 模型修改
    • 模型保存与读取
  • 第六章:PyTorch进阶训练技巧
    • 自定义损失函数
    • 动态调整学习率
    • 模型微调-torchvision
    • 模型微调-timm
    • 半精度训练
    • 数据扩充
    • 超参数的修改及保存
    • PyTorch模型定义与进阶训练技巧
  • 第七章:PyTorch可视化
    • 可视化网络结构
    • 可视化CNN卷积层
    • 使用TensorBoard可视化训练过程
    • 使用wandb可视化训练过程
  • 第八章:PyTorch生态简介
    • 简介
    • 图像—torchvision
    • 视频—PyTorchVideo
    • 文本—torchtext
    • 音频-torchaudio
  • 第九章:模型部署
    • 使用ONNX进行部署并推理
  • 第十章:常见网络代码的解读(推进中)
    • 计算机视觉
      • 图像分类
        • ResNet源码解读
        • Swin Transformer源码解读
        • Vision Transformer源码解读
        • RNN源码解读
        • LSTM源码解读及其实战
      • 目标检测
        • YOLO系列解读(与MMYOLO合作)
      • 图像分割
    • 自然语言处理
      • RNN源码解读
    • 音频处理
    • 视频处理
    • 其他

三、人员安排

成员  个人简介 个人主页
牛志康 DataWhale成员,西安电子科技大学本科生 [知乎][个人主页]
李嘉骐 DataWhale成员,清华大学研究生 [知乎]
刘洋 Datawhale成员,**科学院数学与系统科学研究所研究生 [知乎]
陈安东 DataWhale成员,**民族大学研究生 [个人主页]

教程贡献情况(已上线课程内容):

李嘉骐:第三章;第四章;第五章;第六章;第七章;第八章;内容整合

牛志康:第一章;第三章;第六章;第七章;第八章,第九章,第十章;文档部署

刘洋:第二章;第三章

陈安东:第二章;第三章;第七章

四、 课程编排与配套视频

部分章节直播讲解请观看B站回放(持续更新):https://www.bilibili.com/video/BV1L44y1472Z

  • 课程编排: 深入浅出PyTorch分为三个阶段:PyTorch深度学习基础知识、PyTorch进阶操作、PyTorch案例分析。

  • 使用方法:

    我们的课程内容都以markdown格式或jupyter notebook的形式保存在本仓库内。除了多看加深课程内容的理解外,最重要的还是动手练习、练习、练习

  • 组队学习安排:

    第一部分:第一章到第四章,学习周期:10天;

    第二部分:第五章到第八章,学习周期:11天

五、关于贡献

本项目使用Forking工作流,具体参考atlassian文档大致步骤如下:

  1. 在GitHub上Fork本仓库
  2. Clone Fork后的个人仓库
  3. 设置upstream仓库地址,并禁用push
  4. 使用分支开发,课程分支名为lecture{#NO}#NO保持两位,如lecture07,对应课程目录
  5. PR之前保持与原始仓库的同步,之后发起PR请求

命令示例:

# fork
# clone
git clone [email protected]:USERNAME/thorough-pytorch.git
# set upstream
git remote add upstream [email protected]:datawhalechina/thorough-pytorch.git
# disable upstream push
git remote set-url --push upstream DISABLE
# verify
git remote -v
# some sample output:
# origin	[email protected]:NoFish-528/thorough-pytorch.git (fetch)
# origin	[email protected]:NoFish-528/thorough-pytorch.git (push)
# upstream	[email protected]:datawhalechina/thorough-pytorch.git (fetch)
# upstream	DISABLE (push)
# do your work
git checkout -b lecture07
# edit and commit and push your changes
git push -u origin lecture07
# keep your fork up to date
## fetch upstream main and merge with forked main branch
git fetch upstream
git checkout main
git merge upstream/main
## rebase brach and force push
git checkout lecture07
git rebase main
git push -f

Commit Message

提交信息使用如下格式:<type>: <short summary>

<type>: <short summary>
  │            │
  │            └─⫸ Summary in present tense. Not capitalized. No period at the end.
  │
  └─⫸ Commit Type: [docs #NO]:others

others包括非课程相关的改动,如本README.md中的变动,.gitignore的调整等。

六、更新计划

内容 更新时间 内容
apex apex的简介和使用
模型部署 Flask部署PyTorch模型
TorchScript TorchScript
并行训练 并行训练
模型预训练 - torchhub torchhub的简介和使用方法
目标检测 - SSD SSD的简介和实现
目标检测 - RCNN系列 Fast-RCNN & Mask-RCNN
目标检测 - DETR DETR的实现
图像分类 - GoogLeNet GoogLeNet的介绍与实现
图像分类 - MobileNet系列 MobileNet系列介绍与实现
图像分类 - GhostNet GhostNet代码讲解
生成式对抗网络 - 生成手写数字实战 生成数字并可视化
生成式对抗网络 - DCGAN
风格迁移 - StyleGAN
生成网络 - VAE
图像分割 Deeplab系列 Deeplab系列代码讲解
自然语言处理 LSTM LSTM情感分析实战
自然语言处理 Transformer
自然语言处理 BERT
视频 待定
音频 待定
自定义CUDA扩展和算子

七、鸣谢与反馈

  • 非常感谢DataWhale成员 叶前坤 @PureBuckwheat 和 胡锐锋 @Relph1119 对文档的细致校对!
  • 如果有任何想法可以联系我们DataWhale也欢迎大家多多提出issue。
  • 特别感谢以下为教程做出贡献的同学!并特别感谢MMYOLO的贡献者们!

Made with contrib.rocks.

八、关注我们

Datawhale是一个专注AI领域的开源组织,以“for the learner,和学习者一起成长”为愿景,构建对学习者最有价值的开源学习社区。关注我们,一起学习成长。

LICENSE

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

thorough-pytorch's People

Contributors

dawin2015 avatar ddreame avatar dependabot[bot] avatar kedreamix avatar laffycat avatar lijiaqi96 avatar limafang avatar liu-yang-maker avatar logan-zou avatar mr-atomer avatar rangeking avatar relph1119 avatar sakura-cat avatar shenhao-stu avatar xinqi-fan avatar zhikangniu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

thorough-pytorch's Issues

optim.zero_grad()

optim.zero_grad()这个方法除了能将累积的梯度清零,还有一个作用就是当多个batch只调用一次这个函数时,相当于增大了batch_size,也就是可以将batch大小增大n倍

自动求导学习提出建议

1.pytorch内部雅可比向量积是如何计算的,是否可以给出数学公式
2.
image

.grad_fn是对tensor计算一次就引用一次Function对象,来产生运算结果,记录运算的发生,保存记录运算的输入,tensor使用.grad.fn属性记录这个计算图的入口,反向传播中,autograd引擎会按照逆序,通过function的backward依次计算梯度.
手动创建这里建议给出例子,比如:
image
3.对于markdown公式无法显示问题,是否能改善一下,阅读体验不佳
4.
image
对于开篇的这些总结,感觉可以在下面对应代码块的头部进行匹配,这样对于小白来说阅读起来会更容易理解一些,不会摸不着头脑,可以适当在结尾处对知识点做一些总结。

Issue on page /第六章/6.5 数据增强-imgaug.html

imgaug 年久失修,若imshow需要修改源码:

python3.10/site-packages/imgaug/imgaug.py

        fig, ax = plt.subplots(figsize=(w, h), dpi=dpi)
        fig.canvas.set_window_title("imgaug.imshow(%s)" % (image.shape,))
        # cmap=gray is automatically only activate for grayscale images
        ax.imshow(image, cmap="gray")

其中需要把
fig.canvas.set_window_title 修改为 fig.canvas.manager.set_window_title

Good job

The tutorial as a whole is still a great effort, although there are some errors. I hope the rest of the chapter will be updated quickly.

Issue on page /第五章/5.3 PyTorch修改模型.html

ResNet(
(conv1): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)
(bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
(maxpool): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)
(layer1): Sequential(
(0): Bottleneck(
(conv1): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
(downsample): Sequential(
(0): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
)
)
..............
(avgpool): AdaptiveAvgPool2d(output_size=(1, 1))
(fc): Linear(in_features=2048, out_features=1000, bias=True)
)
请问如果我想修改net.layer1中的(0).conv1应该怎么获取呢?目前只会net.layer1=xxx或者net.fc=xxx这种,再往layer1中里面的层修改应该怎么获取?谢谢

这里是不是写错了?

image
FN是否应为实际为阳性,模型检测为阳性
TN是否应为实际为阴性,模型检测为阳性

图片

文档图片都挂了怎么解决啊

第一章 混淆矩阵 错别字

第一段: "实际类别为正样本;True Negative (TP)代表的是实际类别和预测类标相同,预测类别和实际类别均为负样本。"
这里应该是TN 缩写。

CH1 12.2.3 PyTorch的离线安装

step 5:离线下载
问题描述:下载pytorch、torchvision压缩包后,使用conda install --offline安装,安装完成后,无法在python中import torcch
其他验证:采用在线安装后,可以import torch
环境说明:macOS v12.3.1 python 3.8 conda 23.1.0

第二章-2.1张量

image

  1. 空缺
# rand是[0,1)均匀分布 #https://pytorch.org/docs/1.9.1/generated/torch.rand.html#torch.rand
# randn是服从N(0,1)的正态分布 #https://pytorch.org/docs/1.9.1/generated/torch.randn.html#torch.randn
  1. 参数不足
#normal缺参数, 参考:https://pytorch.org/docs/1.9.1/generated/torch.normal.html#torch.normal
print(torch.normal(4.0,3.0,(4,)))
  1. 可能是版本问题,我这边是1.9.0,函数找不到
#uniform 找不到
print(torch.__version__)
help(torch.uniform)

image

离线安装pytorch和torchvision出现CondaValueError: cannot mix specifications with conda package filenames

windows环境:
在下载地址https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/中下载torchvision-0.10.0-py37_cu111 (1).tar.bz2和pytorch-1.10.1-py3.9_cuda11.1_cudnn8_0.tar.bz2两个包后,复制它们到相应环境的site-packages目录下,然后输入命令conda install --offline torchvision-0.10.0-py37_cu111 (1).tar.bz2出现提示:
CondaValueError: cannot mix specifications with conda package filenames

召集uu参与教程编写

为了更好的完善教程,我们结合当前thorough-pytorch项目的进度,给出了以下task,希望有更多的同学能加入开源的贡献。主要有以下任务:

补充深度学习相关知识(包括卷积,池化,全连接,激活函数,dropout,batch normalization,BP反向传播)(2人)
补充计算机视觉领域、自然语言处理领域,语音处理相关简介(类比一篇论文的introduction,只需说明是什么,有哪些方法即可)(多人)
介绍人工智能发展简史、DL,ML,AI三者之间的关系(1人)
介绍评价相关指标(混淆矩阵, accuracy, precision, recall, F1 score)(1人)
Jupyter notebook或Jupyter Lab相关操作(1人)
一些经典代码的解读(包括但不限于ResNet,GoogleNet,MobileNet,RCNN系列,SSD,YOLO系列,transformer系列,ViT,Detr,BERT,GPT系列,CLIP,GAN相关)(该任务意在介绍一些真正的代码工作是如何写的,建议解读的是PyTorch源码、官方实现的代码或者一些标准库代码包括但不限于timm等)(多人)
联系方式:
email: [email protected]
wechat: ZhikangNiu_Wechat

Issue on page /第五章/5.4 PyTorh模型保存与读取.html

这一节有一些代码错误了,附上我修改的代码:

1

image

改为:

import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0,1,2'   #这里替换成希望使用的GPU编号
import torch
from torchvision import models

model = models.resnet152(pretrained=True)
model = nn.DataParallel(model).cuda()

保存+读取模型权重
torch.save(model.module.state_dict(), save_dir)

os.environ['CUDA_VISIBLE_DEVICES'] = '0'   #这里替换成希望使用的GPU编号
loaded_model = models.resnet152()   #注意这里需要对模型结构有定义
loaded_model.load_state_dict(torch.load(save_dir))
loaded_model = nn.DataParallel(loaded_model).cuda()
loaded_model.state_dict

2

image

改为:

import os
import torch
from torchvision import models
os.environ['CUDA_VISIBLE_DEVICES'] = '0,1,2'   #这里替换成希望使用的GPU编号
print(os.environ['CUDA_VISIBLE_DEVICES'])

model = models.resnet152(pretrained=True)
model = nn.DataParallel(model).cuda()

# 保存+读取模型权重,强烈建议!!
torch.save(model.module.state_dict(), save_dir)
loaded_model = models.resnet152()   #注意这里需要对模型结构有定义
loaded_model.load_state_dict(torch.load(save_dir))
loaded_model = nn.DataParallel(loaded_model).cuda()
loaded_model

3

image

请问这里是怎么看的?
希望作者大大解答

测试环境:
Ubuntu 22.04
NVIDIA 1080 ti * 4

3.3数据读入,class MyDataset(dataset)26行

3.3数据读入,class MyDataset()这段代码26行发现了一个错误:raw_label = self.label_info.loc[self.label_info['Image_index'] == image_name],这里self.label_info['Image_index'] == image_name是一个关系式,其结果为布尔值,self.label_info.loc[1]或者self.label_info.loc[0]无法取值,这里是不是应该改为 if self.label_info['Image_index'] == image_name: raw_label = self.label_info.loc[self.label_info['Image_index'] ]

第一个issues,cool~

十分感谢这个教程,我现在在dw的trm课程和李宏毅机器学习课程学习,关于.DS_Store文件,建议写个.gitignore文件,参考资料

# IDE
.vscode/
.idea/
.git/
# Python
__pycache__/

# Windows
*.bat
Thumbs.db
Desktop.ini

# Mac OS X
*.DS_Store

可能需要notebook文件直接运行代码

从第三章开始后面感觉基本上都需要运行代码来查看对应的结果,但是目前主要提供的是markdown的文件,可能出于让学员手动敲命令加强学习效果的意图,所以没有提供jupyter notebook格式的文件?
我暂时采取的方案是使用notedown将markdown文件直接转为notebook文件来运行,效果还可以,但是需要手动去转换。所以想问下有没有直接提供notebook文件的计划?非常感谢

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.