【问题标题】:Choosing layers to be trained and adding skip connections in the trained Inception model in Keras [closed]在 Keras 的训练后的 Inception 模型中选择要训练的层并添加跳过连接 [关闭]
【发布时间】:2019-10-07 14:16:21
【问题描述】:

我想用这样的 CT 灰度图像训练一个模型:

对于某些类别的疾病,我的训练集是有限的,例如 2,000 个阳性和 98,000 个阴性。

我正在考虑使用迁移学习来避免过度拟合并提高模型的有效性,但我也意识到我应该微调模型,因为我提供给模型的图像类型与使用的图像类型非常不同我将使用的 Inception 模型已经过训练。

然后我的问题是我不确定我应该保持多少层固定以及多少层可训练。

我当时正在考虑使用跳过连接来应用随机深度,让网络了解真正需要多少层。

所以我正在考虑实现以下架构。

即我将在 Keras (Tensorflow 2.0) 附带的预训练初始模型的层之间添加跳跃连接。

我欢迎就如何实施这些想法提出建议。特别是如何将网络分成三部分,保持第一部分不变(不可训练)并在添加跳过连接后训练第二部分。实现应该在 Keras 中。

【问题讨论】:

  • 这里有一些有用的建议。对于考虑提供帮助的读者来说,这对你来说同样重要。 (1) 你可能问的问题太多了。两天内发布八篇帖子意味着您无需等待一件事的答案,然后再跳到下一件事。这将进一步向我表明您没有进行必要的研究。 (2) 您正在添加关于感谢帮助的闲聊材料,尽管许多编辑已从您之前的帖子中删除了此内容。技术写作在这里是一种期望。可根据要求提供元参考。

标签: python tensorflow keras conv-neural-network transfer-learning


【解决方案1】:
  1. 迁移学习确实是正确的方法。这使您可以利用经过训练的权重来处理 DL 图像处理的“通用”任务,例如形状识别、边缘检测等,并且在某种程度上可以保存您的数据(输入和标签)为您的特定任务重新构建现有的神经网络。

  2. 根据经验,权重越接近输入,它们的功能就越通用,您就越不想重新训练它们。相反,权重越接近输出,它们的功能就越具体,它们需要的再训练就越多。

  3. 我建议在重新训练现有权重之前训练端点分类器。 1-2 个全连接层(阅读:Dense)和你最喜欢的激活函数 + 1 个全连接层和 softmax 激活(因为我们希望输出是每种疾病的预测概率)应该可以解决问题。在训练这个(端点分类器)时,一定要冻结所有其他层(或使用瓶颈特征 - 请参阅下面的链接)。

  4. 只有这样,您才应该重新训练现有的权重 - 这称为微调。我建议解冻第一个 inception module*,然后允许它(以及最后一步中已经训练过的端点分类器!)重新训练。然后可能解冻下一个 inception 模块,并允许它也进行训练(同样,同时也允许第一个 inception 模块和新的端点分类器也重新训练。重新训练段时,始终允许下游的权重也重新训练) .

  5. 请注意,微调应使用较慢的训练速率。

  6. 据我所知,跳过连接不要“让网络了解真正需要多少层。”。它们大多允许规避梯度递减问题。 “跳过”的层不会成为“可选”,它们将参与生成输出。而且,由于使用的权重不考虑将通过跳过连接添加的输入,我相信它会使权重的训练变得无关紧要,需要重新训练整个网络,从而阻止迁移学习。

    这将是一个有趣的实验,但如果尝试,后果自负。

  7. 如果你真的想要跳过连接,我建议你使用已经有它们的模型(并且因此调整了权重),例如 ResNet。

请查看此链接以获取有关迁移学习、瓶颈功能和微调的更多想法。和增强,当你在它的时候。

https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html

*我的意思是输出规定中的第一个,即图像中最高的一个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-28
    • 2018-10-19
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    相关资源
    最近更新 更多