gpt4 book ai didi

python-3.x - MXNet:nn.Activation 与 nd.relu?

转载 作者:行者123 更新时间:2023-12-03 17:28:16 30 4
gpt4 key购买 nike

我是 MXNet 的新手(我在 Python3 中使用它)

他们的教程系列鼓励您定义自己的 gluon blocks .

假设这是你的 block (一个常见的卷积结构):

class CNN1D(mx.gluon.Block):
def __init__(self, **kwargs):
super(CNN1D, self).__init__(**kwargs)
with self.name_scope():
self.cnn = mx.gluon.nn.Conv1D(10, 1)
self.bn = mx.gluon.nn.BatchNorm()
self.ramp = mx.gluon.nn.Activation(activation='relu')

def forward(self, x):
x = mx.nd.relu(self.cnn(x))
x = mx.nd.relu(self.bn(x))
x = mx.nd.relu(self.ramp(x))
return x

这是他们示例结构的镜像。mx.nd.relumx.gluon.nn.Activation 有什么区别?

应该是

x = self.ramp(x)

代替

x = mx.nd.relu(self.ramp(x))

最佳答案

看来

mx.gluon.nn.Activation(activation=<act>)

是一个包装器,用于从 NDArray 调用大量底层激活。模块。

因此 - 原则上 - 在前向定义中是否使用并不重要

x = self.ramp(x)

x = mx.nd.relu(x)

x = mx.nd.relu(self.ramp(x))

因为 relu 只是取 0 的最大值和传递的值(因此除了运行时持续时间略有增加之外,多个应用程序不会比单个调用影响该值)。

因此在这种情况下它并不重要。当然,对于其他激活函数,堆叠多个调用可能会产生影响。

在 MXNets 文档中,他们使用 nd.relu在定义 gluon.Block 时的正向定义中秒。这可能比使用 mx.gluon.nn.Activation(activation='relu') 带来的开销略少。 .

flavor 方面 gluon模块意味着高级抽象。因此我认为在定义 block 时应该使用 ramp = mx.gluon.nn.Activation(activation=<act>)而不是 nd.<act>(x)然后调用self.ramp(x)在前向定义中。

然而鉴于此时所有自定义 Block教程/文档坚持 relu激活,这是否会产生持久的后果还有待观察。

一起使用mx.gluon.nn.Activation似乎是一种从 NDArray 调用激活函数的方法来自 Gluon 的模块模块。

关于python-3.x - MXNet:nn.Activation 与 nd.relu?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46285711/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com