首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >efficientnet如何调整通道数

efficientnet如何调整通道数
EN

Stack Overflow用户
提问于 2020-03-08 09:56:38
回答 1查看 134关注 0票数 1

我在efficientnet上阅读代码时,被它的巧妙想法所震惊。但我不太明白它是如何调整频道数量的。

代码语言:javascript
运行
复制
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

EN

回答 1

Stack Overflow用户

发布于 2020-04-03 02:27:49

它使得缩放后的宽度可以被depth_divisor整除。您可以将缩放宽度四舍五入为depth_divisor的最接近倍数,但需要额外考虑(当下降超过10%时向上舍入)。在各种MobileNets和EfficientNets中该函数的几乎所有应用程序中,depth_divisor都是8。

为什么是8?主要是由于GPU和TPU等常见硬件加速器的限制。请参阅最近的cuDNN开发人员指南,并计算“8的倍数”、“32的倍数”等指导原则,以优化某些操作的性能:

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

对于*_ALGO_WINOGRAD_NONFUSED以外的算法,当满足以下要求时,cuDNN库将触发张量核操作:

  • 输入、过滤器和输出描述符(适用的xDesc、yDesc、wDesc、dxDesc、dyDesc和dwDesc )为dataType = CUDNN_DATA_HALF (即FP16)。有关填充,请参阅FP32-to-FP16 Conversion.
  • The输入和输出特征映射的数量(即通道维度C)是8的倍数。当通道维度不是8的倍数时,请参阅填充。
  • 过滤器是CUDNN_TENSOR_NCHW或CUDNN_TENSOR_NHWC.
  • If类型,使用CUDNN_TENSOR_NHWC类型的过滤器,然后输入、过滤器和输出数据指针(X,Y,W,dX,dY,和dW )与128位边界对齐。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60583868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档