Как настраивается количество каналов в эффективных сетях? - PullRequest
0 голосов
/ 08 марта 2020

Я читал код на efficien tnet и был шокирован его умными идеями. Но я не совсем понимаю, как он регулирует количество каналов.

def round_filters(filters, width_coefficient, depth_divisor):

  filters *= width_coefficient
  new_filters = int(filters + depth_divisor / 2) // depth_divisor * depth_divisor
  new_filters = max(depth_divisor, new_filters)
  # Make sure that round down does not go down by more than 10%.
  if new_filters < 0.9 * filters:
     new_filters += depth_divisor
  return int(new_filters)

Я знаю, что количество каналов необходимо регулировать с помощью коэффициента ширины, но почему я делаю следующее? Что такое depth_divisor?

1 Ответ

0 голосов
/ 02 апреля 2020

Делает масштабированную ширину делимой на depth_divisor. Вы можете рассматривать как округление масштабированной ширины до ближайшего кратного depth_divisor с некоторым дополнительным вниманием (округление в большую сторону при снижении более чем на 10%). Почти во всех приложениях этой функции в различных MobileNets и EfficientNets глубина_раздела равна 8.

Почему 8? Главным образом из-за ограничений общих аппаратных ускорителей, таких как GPU и TPU. См. Недавнее руководство разработчика cuDNN и подсчитайте количество «кратно 8», «кратно 32» и т. Д. c рекомендации по оптимальной производительности определенных операций:

https://docs.nvidia.com/deeplearning/sdk/cudnn-developer-guide/index.html

Для алгоритмов, отличных от * _ALGO_WINOGRAD_NONFUSED, при соблюдении следующих требований библиотека cuDNN будет запускать операции Tensor Core:

  • Ввод, фильтрация и выходные дескрипторы (xDes c, yDes c, wDes c, dxDes c, dyDes c и dwDes c в зависимости от обстоятельств) имеют тип dataType = CUDNN_DATA_HALF (т. е. FP16). Для FP32 dataType см. Преобразование FP32 в FP16.

  • Количество входных и выходных карт характеристик (т. Е. Размер канала C) кратно 8. Когда размер канала не кратно 8, см. Padding.

  • Фильтр имеет тип CUDNN_TENSOR_NCHW или CUDNN_TENSOR_NHW C.

  • При использовании фильтра с типом CUDNN_TENSOR_NHW C, тогда указатели входных, фильтрующих и выходных данных (X, Y, W, dX, dY и dW в зависимости от обстоятельств) выравниваются по 128-битным границам.

...