【问题标题】:How to modify freezed layers in training using Tensorflow's Object Detection API?如何使用 Tensorflow 的对象检测 API 修改训练中的冻结层?
【发布时间】:2019-09-21 13:10:14
【问题描述】:

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

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

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

【问题讨论】:

  • 如果冻结一个层,在训练的时候不应该微调吗?
  • 你的问题标题不是很清楚。冻结层不应该在训练期间被修改。可能你的意思是How to freeze layers in training using TF OD API?

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


【解决方案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"]
  ...

您可以通过检查张量流图来验证权重实际上是否已冻结。

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

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

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

【讨论】:

  • 感谢您的精彩解释。你说我们可以包含在配置文件中。但是在https://github.com/tensorflow/models/blob/master/research/object_detection/samples/configs/faster_rcnn_resnet50_coco.config这个配置文件中,并没有freezed layer这样的实现。这是我对在 Tensorflow 中为 faster_rcnn_resnet50 实施冻结的位置的查询。
  • 哦,误会了。但是由于 proto 支持它,即使示例配置不包含它,您也可以添加它。
  • 你的意思是Tensorflow Objection Detection API 不做迁移学习到只有几层?如果没有这样的freeze_variables: in train config file,它会重新训练所有层,是吗?
  • 不,我不是这个意思。它可以对任何层进行迁移学习。如果没有freeze_variables,则训练时会更新所有层的权重。
  • @xanjay,我不知道这 12 到底是什么意思,但我认为它只是用于语法。如果您查看 train.proto,您会看到通常以 [default = ...] 格式提供默认值。 freeze_variables 没有默认值。要找出可能的值,你可以通过查看张量流图来做我所做的事情。你实际上可以冻结任何可训练的变量,唯一的问题是指定确切的变量名称。
猜你喜欢
  • 2021-09-24
  • 1970-01-01
  • 2021-12-18
  • 2019-04-05
  • 2018-05-15
  • 1970-01-01
  • 1970-01-01
  • 2020-02-06
  • 2018-04-18
相关资源
最近更新 更多