【问题标题】:Difference between resNet conv1 and traditional conv2d layerresNet conv1和传统conv2d层的区别
【发布时间】: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

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

【问题讨论】:

  • 比较结果时发现了什么?

标签: neural-network torch conv-neural-network resnet


【解决方案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 而不是 3x3
b) 填充 3x3 而不是 1x1 和
c) 来自预训练模型的 resnet50.conv1 的权重将取决于训练并且没有像 nn.Conv2d(3, 64, kernel_size=3, stride=2, padding=1, bias=False) 那样随机正常初始化

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 结果太差了
    猜你喜欢
    • 2019-07-09
    • 2019-09-19
    • 2023-02-20
    • 2018-05-05
    • 2020-03-01
    • 2011-03-02
    • 2017-12-23
    • 2019-04-09
    • 2016-05-15
    相关资源
    最近更新 更多