resNet conv1和传统conv2d层之间的区别

问题描述

我正在使用一层从图像中提取特征。旧层是

self.conv = nn.Conv2d(3,64,kernel_size=3,stride=2,padding=1,bias=False)

新层是

resConv = models.resnet50(pretrained=True)
resConv.conv1 = nn.Conv2d(3,bias=False)
self.conv = resConv.conv1

任何性能差异?或两个图层都相同。

解决方法

但是,几乎有一些区别。根据论文https://arxiv.org/abs/1512.03385,resnet50的conv1层(如您在torchvision.models.resnet50()中所见)具有

conv1 = {Conv2d} Conv2d(3,64,kernel_size=(7,7),stride=(2,2),padding=(3,3),bias=False)

所以差异是
a)kernel_size是7x7而不是3x3
b)3x3的填充不是1x1,并且
c)将对来自resnet50.conv1的权重进行调整训练中,并且未初始化为nn.Conv2d(3,kernel_size=3,stride=2,padding=1,bias=False)

的随机法线 ,

这里的主要区别在于self.Conv中的权重是默认值(例如零)并且需要训练,但是在使用预训练模型的resConv.Conv1中,权重是经过调整的,因为它是使用大型数据集训练的以前。

性能结果取决于您的任务,但总的来说,它有助于获得更好的结果(更好的局部最优)或需要更少的训练时间。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...