如何使用 Tensorflow 的对象检测 API 在训练中修改冻结层?
How to modify freezed layers in training using Tensorflow's Object Detection API?
我在训练中使用Tensorflow's Object Detection API。
在哪个文件中,定义了冻结层以在训练中微调模型。
我需要在微调中尝试更改冻结层。
例如,如果我使用Resnet50 configuration,我可以在哪里更改冻结图层?
你当然可以做到。
通过读取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
选择特定的模式,您可以非常灵活地冻结变量(您可以从张量流图中获取层名称)。
顺便说一句,here 是实际的过滤操作。
我在训练中使用Tensorflow's Object Detection API。
在哪个文件中,定义了冻结层以在训练中微调模型。 我需要在微调中尝试更改冻结层。
例如,如果我使用Resnet50 configuration,我可以在哪里更改冻结图层?
你当然可以做到。
通过读取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
选择特定的模式,您可以非常灵活地冻结变量(您可以从张量流图中获取层名称)。
顺便说一句,here 是实际的过滤操作。