关于 Keras 迁移学习的讨论

Posted

技术标签:

【中文标题】关于 Keras 迁移学习的讨论【英文标题】:Discussion about Transfer Learning with Keras 【发布时间】:2020-10-04 16:28:07 【问题描述】:

我目前正在对基于传感器的活动数据集进行迁移学习,我尝试了两种方法来迁移之前在另一个数据集上训练过的模型。

第一种迁移方式是加载训练好的模型,剪掉最后一个dense和softmax分类层,添加一个新的dense层和softmax层(对应新类的个数),冻结除新的每一层添加并在新数据集上拟合模型。这导致 F1 分数为 30%。

转移模型的第二种方法是初始化一个新模型,基于新数据集,冻结除最后一层外的每一层,仅将权重从加载的模型转移到新初始化的模型并训练模型。这导致 F1 分数或多或少 90%。

所以现在,我正试图弄清楚这两种转移模型的方法之间到底有什么区别。最后的第二种方法只是一个新模型,其中权重已使用已训练的权重进行初始化,而不是使用来自初始化函数(glorot_uniform,lecun_uniform,...)的权重,对吗?对于我对迁移学习的理解,这也是正确的做法。 至于我理解的概念,在迁移学习中,你只重用权重而不是整个模型。

我仍然想知道还有什么对第一种方法的训练产生了如此严重的影响,导致 F1 仅 30%?

谢谢和最好的问候。

【问题讨论】:

预训练架构在 imagenet 数据集上进行训练。如果您的数据分布不同,并且您冻结了所有层,那么您的架构肯定会过拟合。使用 imagenet 权重加载模型并将其设置为可训练,以便根据您的数据集修改权重。否则,设置可训练的最后几层来捕获复杂的特征。在 TL 中,权重会被重用,但会根据您的数据集进行修改。你说的第二个模型是ResNet/InceptionResnet/Xception等的架构吗? 您好,感谢您的评论。我不使用图像,我使用基于传感器的活动数据。我使用的架构是基于 mdpi.com/1424-8220/16/1/115/htm 的 DeepConvLSTM。该架构由 3 个 Conv-Layers、2 个 LSTM 层和一个用于分类的带有 softmax 激活的密集层组成。对于转移模型,我遵循了视频youtube.com/watch?v=FQM13HkEfBk 中提出的 Andrew Ng 的建议。他冻结了所有转移的层,只将最后一个密集层设置为可训练的。 基于传感器的活动数据意味着我有一个由加速度计、陀螺仪和/或磁力计记录的 x、y 和 z 轴的时间离散信号。根据使用的数据集,您有 3、6 或 9 个通道。 【参考方案1】:

我刚刚意识到一些错误,我将在这里发布我的代码,以帮助其他人不要犯同样的错误。

30% 的 F1-Score 实际上是转移我的模型后的正确值。我的 F1-Score 或多或少 90% 的原因是因为我从头开始再次训练我的网络。我在转移过程中做错了以下几点:

    我没有冻结图层,而是将整个图层设置为 False(令人惊讶的是没有引发异常)(第 5 行) loaded_net 保持未定义,直到第 2 行中的网络初始化被执行。这意味着,我之前训练的权重会被直接覆盖。
1            loaded_net = tensorflow.keras.models.clone_model(self.neural_network)
2            self.init_network()
3            for i in range(1, len(loaded_net.layers[:-1])):
4                self.neural_network.layers[i].set_weights(loaded_net.layers[i].get_weights())
5                self.neural_network.layers[i] = False
6            self.neural_network.compile(loss='mse', optimizer=self.optimizer,
7                                        metrics=(['accuracy', f1, precision, recall]))

谢谢和最好的问候,

【讨论】:

以上是关于关于 Keras 迁移学习的讨论的主要内容,如果未能解决你的问题,请参考以下文章

Keras深度学习实战(10)——迁移学习

火炉炼AI深度学习009-用Keras迁移学习提升性能(多分类问题)

Keras深度学习实战(20)——神经风格迁移详解

Keras实例教程之迁移学习

TensorFlow keras 迁移学习

迁移学习案例:Keras基于VGG对五种图片类别识别