Как инициализировать вес для слоев свертки в Tensorflow Object Detection API? - PullRequest
0 голосов
/ 15 марта 2019

Я следовал этому учебнику для реализации API обнаружения объектов Tensorflow.

Предпочтительным способом является использование предварительно обученных моделей.

Но в некоторых случаях нам нужно обучаться изscratch.

Для этого нам просто нужно закомментировать две строки в файле конфигурации как

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

Если я хочу инициализировать вес с инициализацией веса Xavier, как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 15 марта 2019

Как вы можете видеть в определении прототипа конфигурации , вы можете использовать 3 инициализатора:

  • TruncatedNormalInitializer truncated_normal_initializer
  • VarianceScalingInitializer variance_scaling_initializer

VarianceScalingInitializer - это то, что вы ищете.Это общий инициализатор, который вы можете превратить в инициализатор Xavier, установив factor=1.0, mode='FAN_AVG', как указано в документации .

Итак, установив инициализаторы как

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

в вашей конфигурации, вы получите инициализатор Xavier.

Но также, даже если вам нужно тренироваться на новых данных, рассмотрите возможность использования предварительно обученной сети в качестве инициализации вместо случайной инициализации.Подробнее см. в этой статье .

0 голосов
/ 15 марта 2019

Функция извлечения mobilenet_v1 импортирует магистральную сеть из исследований / slim / nets:

25:   from nets import mobilenet_v1

Код mobilenet создает слои в соответствии со спецификацией например:

net = slim.conv2d(net, depth(conv_def.depth), conv_def.kernel, stride=conv_def.stride, scope=end_point)

См. https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet_v1.py#L264

Как вы можете видеть, kwargs не передано на вызов conv2d, поэтому с текущим кодом вы не можете указать, какойweights_initializer будет использоваться.

Тем не менее, по умолчанию инициализатором в любом случае является Ксавье, так что вам повезло.

Я должен сказать, что модель обучения и обнаружения объектов без предварительной подготовки экстракторанекоторые вспомогательные задачи могут просто не сработать.

...