首页 > 技术文章 > PyTorch大白话教程,10分钟搞明白大致流程

dotman 2020-10-15 13:47 原文

因为最近实验室安排我带一下另外两位硕士生,然后发现好像他们还挺需要一个简单明了的框架manual的,所以打算写个超级白话的精简版。

1. 首先一句话解释下深度学习,就是给所谓网络一个输入,希望其能输出我们想要的结果。如果没有输出想要的结果,就要教育这个网络,调整其参数配置,使其能输出我们想要的结果。这样之后这个网络在面对其他类似的输入的情况下,往往就能够也输出正确的认识。

2. 要完成这个任务,需要下面这些东西:数据集、网络结构、优化器(也就是教育这个网络的方式)、Loss函数(也就是评判网络输出有多符合我们期望的一个指标)

3. 在PyTorch中,上面这些东西都写好了,我们只需要挑选合适的类创建对象即可。数据集为utils.data.Dataset,模型是由nn.Module堆起来的,优化器就是torch.optim.XXXXX,损失函数就是torch.nn.XXXXLoss。有了这四个组件,就可以按照如下的流程训练网络:

1) 初始化Dataset,for循环读取数据

2) 对每次循环返回的数据,扔到model中,获得一个输出

3) 此输出和期望值做Loss,得到与期望的差距

4) 使用优化器教育网络,使其下次的输出能缩小与期望的差距

由于数据只学一次可能还不够,所以有时候上述步骤还需要重复多次

 

下面简单说下四个组件最普通、最简单的写法:

1. 数据集。就是继承torch.utils.data.Dataset,然后在__init__()里面搞两个列表存储input和label的路径或数值。然后在__len__()里面return一下label列表的长度。最后__getitem__()里面传回对应下标的(input,label)元组

2. 网络。这个建议先从网上下几个,看看就明白个大致了。基本就是__init__()初始化层,然后forward()里面把这些层连起来罢了。多看几个相信大家很快就能明白

3. 优化器。直接新建个对象然后把网络权重当参数传进去就完事了

4. Loss函数。每次模型训练输出结果后lossfunc(output,label)一下得到一个值,然后backward就完事了。

 

 

 

10分钟到了没?

推荐阅读