在用张曲流学习时,在神经网络中逐渐解冻层的正确方法是什么?

问题描述 投票:0回答:2
I使用EditiveNet_B0使用转移倾斜,而IM试图做的是在网络学习时逐渐解冻层。首先,我在整个网络的顶部训练1个密集的层,而其他层都被冷冻。我使用此代码冻结图层:

for layer in model_base.layers[:-2]: layer.trainable = False
然后我解冻了整个模型,并使用此代码冻结了我需要的确切层:

model.trainable = True for layer in model_base.layers[:-13]: layer.trainable = False
一切正常。我再模拟一次,然后开始从剩下的地方训练,很棒。但是然后,当我再解冻所有层时,

model.trainable = True

尝试进行微调,我的模型开始从头开始学习。
我尝试了解决此问题的不同方法和方法,但似乎没有任何作用。我也尝试使用

layer.training = False

layer.trainable = False

用于模型中的所有batch_normalization层,但也无济于事。
    
在以前的答案中,我想指出一个非常被忽视的因素:冻结/脱离的因素也取决于您要解决的问题,即。

在您自己的数据集和网络预先培训的数据集的相似性级别上。
python tensorflow keras deep-learning neural-network
2个回答
8
投票

在选择决定之前,您应该咨询下图 请注意,如果您受到硬件的约束,则可以选择完全冷冻的某些图层,因为这样您就有少量的可训练参数。

图片从这里获取(尽管我记得在几个博客中看到过它):
    https://ijisrt.com/assets/upload/files/ijisrt20nov654.pdf
这种往往是针对应用程序的,并不是每个问题都可以从重新培训整个神经网络中受益。

我的模型开始从头开始学习 enter image description here 尽管情况很可能不是这种情况(重量没有重新引导),但绝对可以。您的模型已经对其他任务进行了微调,现在您正在迫使它进行重新训练以做不同的事情。

如果您观察到这样的行为,最有可能的原因是您只是使用大型学习率,这将破坏原始模型的那些微调的权重。 如您所描述的(最后一步),请重新浏览整个模型,应该非常非常仔细地完成学习率(我已经看到了具有10^-8学习率的亚当的实例)。

我的建议是保持降低学习率,直到开始改善而不是损害权重,但这可能会导致如此小的学习率,以至于没有实际用途。

冻结和解冻的方式是纠正,这就是在官方网站上完成的方式:


4
投票
设置层。可鉴定假的是从 可训练不可训练

https://keras.io/guides/transfer_learning/

在其他答案上讨论了,您遇到的问题确实是理论上的,与您对其进行编程的方式无关。

我以前遇到了这个问题。看来,如果我使用顺序API构建我的模型,则在设置

base_model.trainable = True

时,网络将开始从头开始学习。但是,如果我使用功能性API创建模型,那么一切都可以。我创建模型的方式就像本官方教程

Https://www.tensorflow.org/tutorials/images/mimages/transfer_learning-

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.