本文个人认为是本专栏最重要的章节内容之一,前面我们学习了pytorch中的基本数据tensor,后面我们就将学学习深度学习模型的内容了,在学习之前,我们先来看一下我们使用pytorch框架训练神经网络模型的基本步骤,然后我们下面就将这些步骤分解开来,详细学习。
这个代码虽然仅仅有29行,但是确是深度学习模型训练的全部精髓,我们只要把这些掌握,那么毫无疑问pytorch就很简单了,我们先来简单的解释一下这几行代码做了什么?
1.首先引入了程序所需要的库
2.建立网络模型
建立网络模型需要注意几点:首先必须继承nn.Module,然后再__init__方法内构造我们的模型,最后forward方法中写上该网络模型的前向传播过程。
3.数据准备
本程序中构建了一个样本,数据为x,标签为y
4.创建网络模型实例
这个就是初始化网络模型对象就ok
5.定义损失函数
损失函数有很多根据自己的需求来定义,这里使用的是平方和损失函数
6.定义优化器
优化器有很多,我们常用的是随机梯度下降优化器SGD
7.前向传播
将数据x放到模型中经过前向传播就得到了模型的输出logit= model(x),它会自动调用model类的forward方法,当然我们可以指定model.方法(x),这样它会自动调用指定的model方法,反向传播的时候也会按照这个方法来反向传播
8.计算损失
样本标签和模型输出之间肯定有损失,只需要将样本标签和模型输出放到5步定义的损失函数中就可以自动计算出损失
9.梯度清零
因为下面要根据损失进行反向传播了,所以我们需要将梯度清零,以防止梯度叠加
10.反向传播
根据损失计算每一个参数的偏导数,这里只需要一行代码
11.梯度更新
计算完损失关于参数的偏导数之后,我们可以进行梯度更新,此时网络模型完成一次参数更新
以上代码就是完成神经网络训练的基本逻辑,我们可以认为分为12步,我们中实际编程需要我们做好这12步:
1.引入我们程序所需要的库
2.也就是说需要我们自己定义模型,pytorch中已经封装好了很多网络层,我们只需要根据我们的需求来对这些网络层进行组合就可以
3.我们搭建完网络模型之后,我们需要对数据进行处理,让它能够输出到网络模型中(很重要的一块)
4.实例化,这里很简单,如果构建模型的时候,有些网络层数没有写死而是以参数的形式确定,那么我们构建网络模型的时候,需要传递对应的参数。
5.定义损失函数,pytorch中有很多已经封装好的损失函数,我们可以直接使用,如果我们对这些损失函数不满意,我们可以自己计算损失,核心就是操作模型输出和标签,最后得到损失loss(标量)
6.定义优化器,pytorch中定义了很多优化器,比如SGD,Adam,基本上可以满足需要,使用优化器的过程中,我们可以设置不同网络层的参数的学习率,或者梯度衰减,或者正则化
7.前向传播也很简单,模型输出=网络模型对象(样本数据)