欢迎光临散文网 会员登陆 & 注册

03-02-模型容器与AlexNet构建.mp4

2022-09-09 11:42 作者:冰糖炖子瑜  | 我要投稿

模型容器Containers

最常用的是nn.Sequential(按顺序)

观察如何创建nn.Sequential

构建完几个网络层之后,会进入nn.Sequential的构建

首先进入container.py中的class Sequential(Module):类,发现继承于Module,所以会有9个有序字典去管理它的属性,可以看到调用了super去继承module属性

可以看到生产了有序字典

接下来会把网络层添加到sequential当中

判断数据类型是不是有序字典,显然不是

对参数循环的取出每个网络层,再采用module的类方法add_module,将网络层添加到sequential中

取出第一个网络层conv2d,通过module的类方法add_module(在class Module,所以是类方法)

添加进去到sequential的有序字典module中

会发现两个重要的有序字典还是空的,这是因为截至当前,只是构建好了等号右边的sequential,还未赋值给类属性features,根据上节课,会出现一个拦截赋值类属性的函数

setattr函数拦截进行属性判断,可知sequential是一个module

判断完成后,在主module的有序字典中会存储刚刚构建好的module,key:features,value:sequential

sequential下面的有序字典module又有序的存储了构建好的几个网络层


接下来是模型构建的第二个要素,拼接子模块,实现前向传播forward

会进入container.py中的class Sequential(Module)的类方法forward函数,按顺序进行操作最终得到输出

以上是利用nn.sequential容器构建的module,并且实现了构建子模块和拼接子模块进行前向传播。


下面利用nn.sequential容器,加上有序字典的形式构建module

单步运行到等号右边对sequential加入有序字典的网络层

来到container.py中的class Sequential(Module)类,super进入父类初始化,接着判断长度和类型

判断为True,进入循环

循环取出有序字典的key和value(module)

通过class Module:中的类方法add_module函数给sequential这个module赋值


此处,两种方法对应sequential的两种状态

1、

2、


循环完毕,网络层就是有名称的了,可以通过名称去索引每个网络层

总结nn.Sequential








03-02-模型容器与AlexNet构建.mp4的评论 (共 条)

分享到微博请遵守国家法律