代码之家  ›  专栏  ›  技术社区  ›  Nizam

什么是冻结/解冻神经网络中的一层?

  •  2
  • Nizam  · 技术社区  · 6 年前

    我研究神经网络已经有一段时间了,最近遇到了“冻结”和“冻结”这两个术语;在阅读迁移学习的同时,在训练神经网络之前“解冻”这些层;我很难理解它们的用法。

    • 什么时候应该使用冻结/解冻?
    • 哪些层要冷冻/解冻?例如,当我导入一个预先训练好的模型时;在我的数据上训练它,除了输出层之外,我的整个神经网络都冻结了吗?
    • 如何确定是否需要解冻?
    • 如果是这样,我如何确定要解冻哪些层;训练以提高模型性能?
    2 回复  |  直到 6 年前
        1
  •  6
  •   Matus Dubrava    6 年前

    我只想补充另一个答案,这是CNN最常用的,你想要冻结(而不是训练)的层数是由你正在解决的任务与原始任务(原始网络正在解决的问题)之间的相似性“给出的”。

    如果任务非常相似,假设你在imagenet上使用CNN预训练,你只想添加一些网络应该识别的其他“通用”对象,那么你可能只需要训练网络的密集顶部就可以了。

    任务越不相似,在训练过程中需要解冻的原始网络层就越多。

        2
  •  3
  •   Yoskutik    6 年前

    冻结意味着该层不会被训练。因此,其权重不会改变。

    为什么我们需要冻结这些层?

    有时我们想有足够深的神经网络,但我们没有足够的时间来训练它。这就是为什么使用已经具有有用权重的预训练模型。好的做法是从上到下冻结层。例如,你可以冻结10个第一层等等。


    例如,当我导入一个预先训练好的模型时;在我的数据上训练它,除了输出层之外,我的整个神经网络都冻结了吗?
    -是的,可能是这样。但你也不能在最后一层之上冻结几层。

    如何冻结和解冻图层?
    -在keras中,如果要冻结图层,请使用: layer.trainable = False
    要解冻: layer.trainable = True

    如果是这样,我如何确定要解冻哪些层;训练以提高模型性能?
    -正如我所说,好的做法是自上而下的。您应该自己调整冻结层的数量。但要考虑到,你拥有的未冻结层越多,训练速度就越慢。

        3
  •  0
  •   maria_g    6 年前

    在传输层时训练模型时,由于多种原因,我们冻结了某些层的训练,例如它们可能已经收敛,或者我们想将新添加的层训练到已经预训练的模型中。这是迁移学习的一个非常基本的概念,我建议你仔细研究一下 article 如果你对迁移学习一无所知。