【问题标题】:what is a "convolution warmup"?什么是“卷积热身”?
【发布时间】:2019-01-05 19:46:54
【问题描述】:

我之前遇到过这个短语几次,主要是在神经网络和 tensorflow 的上下文中,但我的印象是它更笼统,不限于这些环境。

here 例如,他们说这个“卷积预热”过程大约需要 10k 次迭代。

为什么卷积需要预热?是什么阻止他们立即达到最高速度?

我能想到的一件事是内存分配。如果是这样,我希望它会在 1 次(或至少

编辑澄清:我知道预热是在卷积算子达到其最高速度(每个算子的时间)之前必须完成的时间段或迭代次数。 我要问的是 - 为什么需要它以及在此期间会发生什么使卷积更快?

【问题讨论】:

    标签: tensorflow neural-network gpu conv-neural-network convolution


    【解决方案1】:

    训练神经网络的工作原理是提供训练数据、计算输出误差并将误差反向传播回各个连接。对于对称性破坏,训练不是从全零开始,而是从随机连接强度开始。

    事实证明,使用随机初始化,第一次训练迭代并不是真正有效的。网络并不接近所需的行为,因此计算出的误差很大。反向传播这些大错误会导致过冲。

    预热阶段旨在使初始网络远离随机网络,并趋向于所需网络的第一个近似值。一旦达到近似值,就可以加快学习率。

    这是一个经验结果。迭代次数取决于程序域的复杂性,因此也取决于必要网络的复杂性。卷积神经网络相当复杂,因此预热对它们来说更为重要。

    【讨论】:

    • 感谢您的快速回复,但恐怕这个答案并没有解决我的主要问题 - 为什么需要这么多迭代才能达到最高速度(= 每次迭代的时间,或每次卷积)。只是要明确一点 - 我与学习率无关,据我所知,这不会影响每次卷积操作的时间(或通常,每次迭代的时间)。无论如何,请注意快速响应! :)
    • @akonsk:您似乎是唯一一个声称每次迭代的计时器不同的人。
    • 我必须承认我现在无法在 google 上找到更多示例,但我很确定我在这种情况下至少再遇到过 1 次这个短语。那么您如何解释我带来的链接中关于热身的评论(在“速度”部分下)?
    • @akonsk:我将其解释为学习速度,也就是学习率。这是一个常数,它决定了在前向传播后给定某个误差向量的情况下反向传播多少变化。最初,您对网络进行了相当小的更改,因为它仍然非常随机。
    【解决方案2】:

    您并不是唯一一个声称每次迭代的计时器不同的人。 我运行相同的示例并得到相同的问题。我可以说主要原因是不同的输入图像形状和要检测的对象编号。 我提供我的测试结果来讨论它。 我首先启用跟踪并获取时间线,然后我发现 Conv2D 的出现在 gpu 流中的步骤之间完全不同,然后我使用 export TF_CUDNN_USE_AUTOTUNE=0 禁用自动调谐。 那么时间线上有相同数量的Conv2D,时间大约是0.4s。

    时间成本仍然不同,但更接近!

    【讨论】:

      猜你喜欢
      • 2016-11-11
      • 2020-05-08
      • 1970-01-01
      • 2018-11-05
      • 1970-01-01
      • 2013-08-25
      • 2019-10-03
      • 1970-01-01
      • 2020-03-15
      相关资源
      最近更新 更多