freezing/unfreezing 神经网络中的层是什么?

What is freezing/unfreezing a layer in neural networks?

我玩神经网络已经有一段时间了,最​​近在阅读有关迁移学习的文章时遇到了术语 "freezing" 和 "unfreezing" 训练神经网络之前的层 & am努力理解它们的用法。

冻结意味着该层将不会被训练。所以,它的权重不会改变。

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

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


例如,当我导入一个预训练模型并在我的数据上对其进行训练时,除了输出层之外我的整个神经网络是否被冻结?
- 是的,这可能是个案。但是你也可以不冻结最后一层之上的几层。

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

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

我想补充一下另一个答案,这是最常用于 CNN 的,你想要冻结(而不是训练)的层数是 "given" 任务之间的相似度您正在解决的问题和原始问题(原始网络正在解决的问题)。

如果任务非常相似,假设您使用的是在 imagenet 上预训练的 CNN,而您只想添加网络应该识别的其他一些 "general" 对象,那么您可能只训练网络的密集顶部。

任务越不相似,训练时需要解冻的原始网络层数就越多。

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