【Datawhale组队学习Pytorch】Task03

【项目简介】

        PyTorch是利用深度学习进行数据科学研究的重要工具,在灵活性、可读性和性能上都具备相当的优势,近年来已成为学术界实现深度学习算法最常用的框架。考虑到PyTorch的学习兼具理论储备和动手训练,两手都要抓两手都要硬的特点,我们开发了 《深入浅出PyTorch》课程,期望以组队学习的形式,帮助大家从入门到熟练掌握PyTorch工具,进而实现自己的深度学习算法。学习的先修要求是,会使用Python编程,了解包括神经网络在内的机器学习算法,勤于动手实践。

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

        

【教程地址】
在线教程链接:https://datawhalechina.github.io/thorough-pytorch/
Github在线教程:https://github.com/datawhalechina/thorough-pytorch
Gitee在线教程:https://gitee.com/datawhalechina/thorough-pytorch 
b站视频:https://www.bilibili.com/video/BV1L44y1472Z

经过本节的学习,你将收获*:

  • 熟悉PyTorch中模型定义的三种方式
  • 读懂GitHub上千奇百怪的写法
  • 自己根据需要灵活选取模型定义方式
  • 将简单层构建成具有特定功能的模型块

  • 利用模型块构建复杂网络

  • 如何在已有模型的基础上:修改模型若干层,添加额外输入,添加额外输出

  • PyTorch的模型的存储格式

  • PyTorch如何存储模型
  • 单卡与多卡训练下模型的保存与加载方法

模型定义三种方式

Sequential适用于快速验证结果,因为已经明确了要用哪些层,直接写一下就好了,不需要同时写__init__forward

当我们需要之前层的信息的时候,比如 ResNets 中的残差计算,当前层的结果需要和之前层中的结果进行融合,一般使用 ModuleList/ModuleDict 比较方便。

对于大部分模型结构(比如ResNet、DenseNet等),我们仔细观察就会发现,虽然模型有很多层, 但是其中有很多重复出现的结构。考虑到每一层有其输入和输出,若干层串联成的”模块“也有其输入和输出,如果我们能将这些重复出现的层定义为一个”模块“,每次只需要向网络中添加对应的模块来构建模型,这样将会极大便利模型构建的过程。

组成U-Net的模型块主要有如下几个部分:

1)每个子块内部的两次卷积(Double Convolution)

2)左侧模型块之间的下采样连接,即最大池化(Max pooling)

3)右侧模型块之间的上采样连接(Up sampling)

4)输出层的处理

除模型块外,还有模型块之间的横向连接,输入和U-Net底部的连接等计算,这些单独的操作可以通过forward函数来实现。

你可能感兴趣的:(pytorch,学习,python)