如何使用Tensorflow的对象检测API修改训练中的冻结层?

时间:2019-05-03 01:25:17

标签: tensorflow deep-learning conv-neural-network object-detection-api

我在训练中使用Tensorflow's Object Detection API

在哪个文件中,定义了冻结层以在训练中微调模型。 我需要尝试在微调中更改冻结的图层。

例如,如果我使用Resnet50 configuration,可以在哪里更改冻结的图层?

1 个答案:

答案 0 :(得分:1)

当然可以。

通过阅读proto文件进行培训,有一个名为freeze_variables的字段,这应该是一个包含所有要冻结的变量的列表,例如在训练过程中将它们排除在外。

假设您要冻结第一个块的第一个单元中第一个瓶颈的权重,则可以通过添加

freeze_variables: ["resnet_v1_50/block1/unit_1/bottleneck_v1/conv1/weights"]

所以您的配置文件看起来像这样:

train_config: {
  batch_size: 1
  freeze_variables: ["resnet_v1_50/block1/unit_1/bottleneck_v1/conv1/weights"]
  ...

您可以通过检查tensorflow图来验证权重是否已冻结。 enter image description here

如图所示,权重不再具有train操作。

通过为freeze_variables选择特定的模式,您可以非常灵活地冻结变量(可以从tensorflow图中获取层名称)。

顺便说一句,here是实际的过滤操作。