图像识别技术与应用课后总结(7)

使用 nn.Sequential 按层顺序构建模型(OrderedDict方法)

 代码中导入了 torch 、 nn 以及 OrderedDict ,通过 OrderedDict 来定义模型的各层,包括 Flatten 层、 Linear 层、 BatchNorm1d 层、 ReLU 激活函数层和 Softmax 层。这样做的好处是可以给每一层指定一个名称,方便查看和管理模型结构。

继承 nn.Module 基类并应用模型容器构建模型

1. 使用 nn.Sequential 模型容器

定义了一个名为 Model_lay 的类,继承自 nn.Module 。在 __init__ 方法中初始化模型的各层,包括 Flatten 层、两个由 Linear 和 BatchNorm1d 组成的 Sequential 模块以及最后的输出层。 forward 方法定义了数据在模型中的流动方向。运行结果展示了模型的结构,包括每一层的名称和参数信息。

 2. 使用 nn.ModuleList 模型容器

虽然图片中这部分代码没有完整展示,但 nn.ModuleList 通常用于将多个模块组合在一起,不过它不像 nn.Sequential 那样会自动按照顺序执行模块,更多是用于管理模块集合,在自定义 forward 方法中手动指定各模块的执行逻辑。 

 

 自定义网络模块——残差块

第一种残差块(正常模块方式):

通过代码定义了 ResNetBasicBlock 类,继承自 nn.Module 。其结构包括两个 3x3 卷积层,每个卷积层后接批量规范化层和ReLU激活函数。在 forward 方法中,输入数据依次经过这些层的处理,最后将输入与输出相加,再经过ReLU激活函数得到最终输出。这种方式能让网络学习输入与输出的残差部分,有助于训练更深的网络。

  

第二种残差块(调整形状):

定义了 ResNetDownBlock 类,也是继承自 nn.Module 。当输入与输出形状不一致时,通过添加 1x1 卷积层和批量规范化层来调整通道数和分辨率,使它们能顺利相加。在 forward 方法中,输入数据经过卷积、批量规范化、ReLU激活等操作,同时对输入进行形状调整,最后相加并经过ReLU激活函数输出。

  

组合模块构建ResNet18网络结构

定义了 ResNet18 类,在 __init__ 方法中初始化网络的各层,包括初始的卷积层、最大池化层,以及由不同残差块组成的四个Sequential模块,还有自适应平均池化层和全连接层。 forward 方法描述了数据在网络中的前向传播过程,依次经过各层处理后输出结果。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值