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

bat*_*man 4 deep-learning conv-neural-network tensorflow object-detection-api

我在训练中使用Tensorflow 的对象检测 API

在哪个文件中,冻结层被定义为在训练中对模型进行微调。我需要在微调中尝试更改冻结层。

例如,如果我使用Resnet50 配置,我可以在哪里更改冻结层?

dan*_*ang 12

那当然可以。

通过读取用于训练的proto文件,有一个名为 的字段freeze_variables,这应该是一个包含您要冻结的所有变量的列表,例如在训练期间排除它们。

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

freeze_variables: ["resnet_v1_50/block1/unit_1/bottleneck_v1/conv1/weights"]
Run Code Online (Sandbox Code Playgroud)

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

train_config: {
  batch_size: 1
  freeze_variables: ["resnet_v1_50/block1/unit_1/bottleneck_v1/conv1/weights"]
  ...
Run Code Online (Sandbox Code Playgroud)

您可以通过检查张量流图来验证权重实际上是否已冻结。 在此处输入图片说明

如图所示,权重train不再起作用。

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

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