resNet conv1和传统conv2d层的区别
Posted
技术标签:
【中文标题】resNet conv1和传统conv2d层的区别【英文标题】:Difference between resNet conv1 and traditional conv2d layer 【发布时间】:2020-12-04 00:13:16 【问题描述】:我正在使用一层从图像中提取特征。旧层是
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, 64, kernel_size=3, stride=2, padding=1, bias=False)
self.conv = resConv.conv1
任何性能差异?或两层相同。
【问题讨论】:
比较结果时发现了什么? 【参考方案1】:几乎,但是有一些差异。根据论文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 而不是 3x3b) 填充 3x3 而不是 1x1 和c) 来自预训练模型的 resnet50.conv1 的权重将取决于训练并且没有像 nn.Conv2d(3, 64, kernel_size=3, stride=2, padding=1, bias=False)
那样随机正常初始化
【讨论】:
【参考方案2】:这里的主要区别在于,在 self.Conv 中,权重是默认的(例如零)并且需要训练,但在使用预训练模型的 resConv.Conv1 中,权重会被调整,因为它是使用大型数据集进行训练的之前。
性能结果取决于您的任务,但总的来说,它有助于获得更好的结果(更好的局部最优)或需要更少的 epoch 来训练。
【讨论】:
结果太差了以上是关于resNet conv1和传统conv2d层的区别的主要内容,如果未能解决你的问题,请参考以下文章
我们如何在 PyTorch 中将线性层的输出提供给 Conv2D?
我不明白 conv1d、conv2d 的 pytorch 输入大小
train_image_classifier.py:Cannot assign a device for operation CifarNet/conv1/Conv2D: node CifarNet(