例如,当堆积Dense layers
时,我们通常将神经元的数量设置为256个神经元,128个神经元,64个神经元,...诸若此类。
我的问题是:
传统上使用2^n
神经元的原因是什么?这个实现会让代码运行得更快吗?节省内存?或者还有其他原因吗?
发布于 2020-08-23 00:12:53
这是历史。早期的用于GPU计算的神经网络实现(用CUDA、OpenCL等编写)必须关注有效的内存管理来进行数据并行。
一般来说,您必须在物理处理器上对齐N次计算。物理处理器的数量通常是2的幂。因此,如果计算的数量不是2的幂,则计算不能1:1映射,必须四处移动,这需要额外的内存管理(进一步阅读here)。这只与并行批处理有关,即将批处理大小作为2的幂可以获得更好的性能。有趣的是,拥有其他超参数,如隐藏单元的数量作为2的幂,从来没有可测量的好处-我假设随着神经网络变得越来越流行,人们只是在不知道原因的情况下开始采用这种做法,并将其推广到其他超参数。
如今,一些低级实现可能仍然受益于此约定,但如果您在2020年将CUDA与Tensorflow或Pytorch配合使用,并采用现代GPU架构,那么您不太可能遇到批处理大小为128和129之间的任何差异,因为这些系统针对非常高效的数据并行进行了高度优化。
https://stackoverflow.com/questions/63515846
复制相似问题