网络模型创建的步骤及nn.Module属性

 

在数据模块中我们了解了pytorch是如何从硬盘中读取数据,然后对数据进行预处理,最后转化为张量的形式输入到我们的模型当中。

 

在模型里,是对数据模块出处的张量进行复杂的数学运算,最后得到可以分类、分割、目标检测的输出。

 

 

一、网络模型创建的步骤

这一节学习模型模块。

 

 

模型模块又分两个模块,一个是模型创建,一个是权值初始化。

在模型创建中,又分为两个子模块。构建网络层和拼接网络层。

构建网络层,例如卷积层、池化层、激活函数层等。

构建好网络层之后,再按照一定的顺序进行拼接,得到复杂的神经网络。

 

创建好模型之后,我们要对模型的权值进行初始化。pytorch提供了丰富的初始化方法。。

 

构建子模块,是在__int__()中实现的。

拼接子模块,是在froward()中实现的。

 

 

 

举例:

在人民币二分类实验中,我们已经创建过卷积神经网络的模型LeNet。下面我们回顾一下这个模型。

 

 

LeNet共有7层,分别是卷积池化卷积池化和三个全连接层。

 

在创建LeNet的时候,我们首先会构建这7个子模块,然后连接包装起来就得到我们的LeNet。

 

在pytorch中,LeNet是一个module的概念,而这7个层也是module的概念。他们都属于nn.Module这个类。

因此,一个module可以包含很多个module.

 

下面从计算图的角度来观察模型的创建以及模型当中会实现什么东西。

 

这里是LeNet运算的一个示意图。我们可以把它看作是一个计算图。在计算图中有两个主要的概念:节点、边。

节点就是张量,就是数据。这里就是方框。

边就是运算。这里就是箭头。


 

实现:

 

 

 

 

 

 

 

二、nn.Module属性

在模型模块中,我们有一个非常重要的概念就是nn.Module。我们所有的模型,所有的网络层都是继承于nn.Module这个类的。所以,我们非常有必要去了解这个类。

在学习模型前,我们先介绍与其相关的几个模块。

 

 

torch.nn是pytorch的神经网络模块。在它里面有很多子模块。这里,我们需要了解4个。

nn.Parameter,是一个张量的子类,通常用它来表示可学习的参数,例如权值、偏置。

nn.Module,它是所有网络层的基类,用来管理网络的属性。

nn.functional,它是函数的具体实现。

nn.init,提供了丰富的参数初始化的方法。

 

今天,讲nn.Module。

 

在nn.Module中,有8个重要的属性(有序字典),用于管理整个模型。

 

第一个是parameters,它是用于存储管理属于nn.Parameter这个类的属性,例如权值或偏置这些参数。

第二个是modules,它是用于存储管理nn.Module类的。

buffers,存储管理缓冲属性。

剩下5个是与钩子函数有关的字典,我们暂时不管。

 

可以通过代码调试,可以看到nn.Module加载各层的原理。

 

 

总结:

 

 

 

 

 

 

 

以上是 网络模型创建的步骤及nn.Module属性 的全部内容, 来源链接: utcz.com/a/53186.html

回到顶部