TensorFlow 对象检测 API:使用“fine_tune_checkpoint”进行训练 - 解冻较早的层?
TensorFlow Object Detection API: training with `fine_tune_checkpoint` - unfreeze the earlier layers?
我使用来自 model zoo 的预训练网络 fine_tune_checkpoint
(proto link) 非常成功地训练了模型。
然而,据我所知,使用迁移学习的微调变体,较早的层被冻结。只有最后一层在训练期间实际更新。
这个假设是否正确,即在 TF 对象检测中是否也这样实现 API?
假设是这样,我现在想知道我是否可以通过训练一段时间而不冻结较早的层来挤出更多的性能。但是,我无法在配置文件中找到在这两种训练模式之间切换的直接方法。有什么想法吗?
默认训练配置训练所有权重。
您进行微调的事实仅意味着您加载 some/all 个权重而不是将它们全部初始化(例如,从 ImageNet 预训练模型进行微调或从预训练检测模型进行微调)。
为了冻结一些权重,您需要使用训练配置中的 freeze_variables
选项按模式声明它们的名称。
为了指定应该训练的变量,您可以使用相应的 update_trainable_variables
。
可以在构建后检查 model/graph 来找到这些名称。
我使用来自 model zoo 的预训练网络 fine_tune_checkpoint
(proto link) 非常成功地训练了模型。
然而,据我所知,使用迁移学习的微调变体,较早的层被冻结。只有最后一层在训练期间实际更新。
这个假设是否正确,即在 TF 对象检测中是否也这样实现 API?
假设是这样,我现在想知道我是否可以通过训练一段时间而不冻结较早的层来挤出更多的性能。但是,我无法在配置文件中找到在这两种训练模式之间切换的直接方法。有什么想法吗?
默认训练配置训练所有权重。
您进行微调的事实仅意味着您加载 some/all 个权重而不是将它们全部初始化(例如,从 ImageNet 预训练模型进行微调或从预训练检测模型进行微调)。
为了冻结一些权重,您需要使用训练配置中的 freeze_variables
选项按模式声明它们的名称。
为了指定应该训练的变量,您可以使用相应的 update_trainable_variables
。
可以在构建后检查 model/graph 来找到这些名称。