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

Tensorflow 什么是冻结/解冻神经网络中的一层?,tensorflow,machine-learning,deep-learning,neural-network,transfer-learning,Tensorflow,Machine Learning,Deep Learning,Neural Network,Transfer Learning,我一直在玩神经网络已经有一段时间了,最近在阅读有关迁移学习的书籍时,我遇到了“冻结”和“解冻”这些术语,在训练神经网络之前,我正在努力理解它们的用法 什么时候应该使用冷冻/解冻 哪些层要冻结/解冻?例如,当我导入一个预先训练好的模型并在我的数据上训练它时,除了输出层之外,我的整个神经网络都冻结了吗 如何确定是否需要解冻 如果是,我如何确定要解冻和训练哪些层以提高模型性能 冻结意味着该层不会被训练。因此,它的重量不会改变 为什么需要冻结这些层? 有时我们想要有足够深的神经网络,但我们没有足够的时

我一直在玩神经网络已经有一段时间了,最近在阅读有关迁移学习的书籍时,我遇到了“冻结”和“解冻”这些术语,在训练神经网络之前,我正在努力理解它们的用法

  • 什么时候应该使用冷冻/解冻
  • 哪些层要冻结/解冻?例如,当我导入一个预先训练好的模型并在我的数据上训练它时,除了输出层之外,我的整个神经网络都冻结了吗
  • 如何确定是否需要解冻
  • 如果是,我如何确定要解冻和训练哪些层以提高模型性能
冻结意味着该层不会被训练。因此,它的重量不会改变

为什么需要冻结这些层?

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


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

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

要解冻:
layer.trainable=True

如果是,如何确定要解冻和训练哪些层以提高模型性能?

-正如我所说,良好的实践是自上而下的。您应该自己调整冻结层的数量。但是要考虑到,你拥有的解冻层越多,训练就越慢。

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

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


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

在传输层训练模型时,由于多种原因,我们冻结了某些层的训练,例如,它们可能已经聚合,或者我们希望将新添加的层训练到已经预训练过的层模型。这是迁移学习的一个非常基本的概念,如果你不知道迁移学习,我建议你进行迁移学习。

我认为“我如何确定是否需要解冻?”这个问题不是关于技术解决方案,而是一个类似“我如何知道我应该解冻冰冻层”的问题因此,这是一个关于有助于决定解冻一层的战略和指标的问题。