【11】ResNet中BLock模块的理解

网上有大量的文章对ResNet网络进行了详细的阐述,但是写的都比较模糊,没有对F(X)是什么,每一层的F(x)怎么计算给出详细的过程,因此萌新们在阅读时可能存在question,此处针对block块进行进一步的阐述,谈谈自己的见解。

1 参数理解

如图所示,整个方框表示残差模块,下面解释图中每一个参数的意义。

x:残差块的输入,整个模块的输入,就是之前层的输出

H(X):残差块的输出,就是这个模块算完的结果,就是下面的y通过激活函数的结果,H(X)=G(Y)(其中函数G为激活函数)

F(X):残差,就是我们要学习的目标

W1:第一层的权重

W2:第二层的权重

学习的目的就是找到输出到输入的映射,H(X)=F(X)+x;

F(X)=H(X)-x,即就是要不断的找到这样的F(X),而F(X)就是权重与输入的运算关系,通过不断迭代最终找到合适的权重,并且这个权重不会受到除了残差模块外其他层的过度影响,进而降低了梯度消失和爆炸问题。

2 普通网络计算

3 残差网络计算

 

参考文献:

深度学习笔记(七)--ResNet(残差网络)

Resnet到底在解决一个什么问题呢?

这两篇文章解释的非常透彻,一篇解释了残差网络是怎么前向传导的,一篇介绍残差模块参数怎么计算的。简练。

### 如何在ResNet18神经网络架构中增加自定义模块或层 为了在 ResNet18 中加入新的模块或层,可以遵循 PyTorch 提供的灵活性来修改现有的模型结构。具体方法是在继承 `torch.nn.Module` 类的基础上操作。 #### 修改现有模型的方法 一种常见的方式是从预训练好的 ResNet18 开始,在其基础上添加额外的层或是替换掉最后几层用于特定任务的学习。对于想要插入新组件的情况,可以通过重写模型的部分实现这一目标[^2]。 ```python import torchvision.models as models import torch.nn as nn class CustomResNet18(models.ResNet): def __init__(self, num_classes=1000): super(CustomResNet18, self).__init__( block=models.resnet.BasicBlock, layers=[2, 2, 2, 2], # 对应原版ResNet18配置 ) # 定义一个新的卷积层作为例子 self.custom_conv = nn.Conv2d(512, 256, kernel_size=3, stride=1, padding=1) # 替换原有的fc全连接层以便适应不同的分类数量 self.fc = nn.Linear(256 * 7 * 7, num_classes) def _forward_impl(self, x): # 前向传播保持不变直到最后一个池化层之后 x = self.avgpool(x) x = torch.flatten(x, 1) # 添加自定义处理逻辑 x = self.custom_conv(x.view(-1, 512, 7, 7)) x = torch.relu(x) x = torch.flatten(x, 1) # 继续原有流程并返回最终输出 x = self.fc(x) return x ``` 上述代码展示了如何创建一个基于 ResNet18 的定制版本,并在其内部加入了名为 `custom_conv` 的新卷积层。注意这里假设输入图像大小适合该新增加的操作;实际应用时可能需要调整参数以匹配具体的场景需求[^4]。 此外,如果希望在整个网络之前或之后附加某些功能,则可以直接在实例化标准 ResNet 后再追加其他组件而无需重新定义整个类: ```python model = models.resnet18(pretrained=True) # 在最前面加上一层BN批标准化 model = nn.Sequential( nn.BatchNorm2d(num_features=3), model ) # 或者在最后一层后面接上更多线性变换或其他类型的层 model.fc = nn.Sequential( nn.Dropout(p=0.5), nn.Linear(in_features=model.fc.in_features, out_features=num_classes) ) ``` 这种方法允许更灵活地组合各种现成部件而不必深入理解原始设计细节[^1]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值