首页 > 解决方案 > 如何在 Tensorflow 对象检测 API 中初始化卷积层的权重?

问题描述

我按照本教程实现了 TensorFlow 对象检测 API。

首选方法是使用预训练模型。

但在某些情况下,我们需要从头开始训练。

为此,我们只需将配置文件中的两行注释为

#fine_tune_checkpoint: "object_detection/data/mobilenet_v1_1.0_224/mobilenet_v1_1.0_224.ckpt"
#from_detection_checkpoint: true 

如果我想用 Xavier 权重初始化来初始化权重,我该怎么做?

标签: tensorflowobject-detection-api

解决方案


正如您在配置 protobuf 定义中看到的,您可以使用 3 个初始化程序:

  • TruncatedNormalInitializer truncated_normal_initializer
  • VarianceScalingInitializer variance_scaling_initializer
  • RandomNormalInitializer random_normal_initializer

VarianceScalingInitializer 是您正在寻找的。它是通用初始化程序,您基本上可以通过设置将其转换为 Xavier 初始化程序factor=1.0, mode='FAN_AVG',如文档中所述

因此,通过将初始化程序设置为

initializer {
    variance_scaling_initializer {
        factor: 1.0
        uniform: true
        mode: FAN_AVG
    }
}

在您的配置中,您将获得 Xavier 初始化程序。

而且,即使您需要对新数据进行训练,也请考虑使用预训练网络作为初始化而不是随机初始化。有关更多详细信息,请参阅这篇文章


推荐阅读