【问题标题】:Why does the activation function degrade the time performance of the CNN model? [closed]为什么激活函数会降低 CNN 模型的时间性能? [关闭]
【发布时间】:2021-10-26 09:37:22
【问题描述】:

我正在测试 CNN 模型的时间和准确度性能,并进行了一些不同的小改动。在这个模型中,卷积之间的一些激活层被跳过了。所以我添加了它们。我注意到添加了 ELU 激活的模型具有

每张图像的性能 3.07 毫秒,测试集的准确率 92.26%

没有它们的模型有

每张图像的性能 3.52 毫秒,测试集的准确率 92.34%

虽然模型参数的数量是一样的。所以我的问题是为什么激活会大大降低模型的时间性能?

这里以部分代码为例:

...
nn.Conv2d(28 * filters_multiplier, 28 * filters_multiplier, kernel_size=(3, 1), padding=(1, 0)),
nn.Conv2d(28 * filters_multiplier, 28 * filters_multiplier, kernel_size=(1, 3), padding=(0, 1)),

# nn.ELU(), 

nn.Conv2d(28 * filters_multiplier, 28 * filters_multiplier, kernel_size=(3, 1), padding=(1, 0)),
nn.Conv2d(28 * filters_multiplier, 40 * filters_multiplier, kernel_size=(1, 3), padding=(0, 1)),
...

因此,带有注释块的代码比没有注释的代码运行得更快。

UPD 我刚刚使用 ReLU() 函数进行了测试,它的工作速度与第一个模型一样快,没有激活。所以也许只是在 ELU() 中的问题?

【问题讨论】:

    标签: performance deep-learning pytorch conv-neural-network activation-function


    【解决方案1】:

    ReLU 和 ELU 都没有可学习的参数,但它们仍然需要计算才能执行。

    ELU 对所有x >= 0 执行指数函数。这计算成本很高,因此您的网络速度较慢。

    ReLU 是一种计算成本低廉的计算方法,因为 x[x < 0] = 0 易于操作,因此您不会真正看到时间峰值。这也是 ReLU 成为激活函数的常见选择的原因之一。

    【讨论】:

      猜你喜欢
      • 2016-08-08
      • 1970-01-01
      • 2020-01-22
      • 1970-01-01
      • 2020-11-19
      • 1970-01-01
      • 2021-04-19
      • 1970-01-01
      • 2017-08-18
      相关资源
      最近更新 更多