首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么是relu6中的6?

为什么是relu6中的6?
EN

Stack Overflow用户
提问于 2017-11-10 18:25:06
回答 3查看 30.3K关注 0票数 64

我在R中从头开始破解了一个深度前馈神经网络,它似乎在“硬sigmoid”激活时- max(0,min(1,x)) -比ReLU更稳定。尝试将其移植到TensorFlow,注意到他们没有内置这个激活函数,只有relu6,它使用的上限是6。这是有原因的吗?(我知道您可以使用relu6(x*6)/6,但如果TF人员将6放在那里是有充分理由的,我想知道。)另外,我想知道其他人是否在前馈网络中遇到了ReLU爆炸问题(我知道RNN问题)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-11-10 18:33:26

来自this reddit thread

这在使网络为定点推理做好准备时很有用。如果取消绑定上限,Q.f数字的Q部分会丢失太多比特。将ReLU限制为6将允许它们最多占用3位(最多8位),剩下4/5位用于.f

因此,看起来6只是一个任意值,根据您希望能够将网络的训练参数压缩成的位数来选择。根据“为什么”只实现了值为6的版本,我认为这是因为这是最适合8位的值,这可能是最常见的用例。

票数 68
EN

Stack Overflow用户

发布于 2017-11-10 20:23:51

Tensorflows (https://www.tensorflow.org/api_docs/python/tf/nn/relu6)指向以下文章:

...首先,我们将单位限制为6,因此我们的ReLU激活函数为y= min(max(x,0),6)。在我们的测试中,这鼓励模型更早地学习稀疏特征。在8的公式中,这相当于想象每个ReLU单元仅由6个重复的偏移伯努利单元组成,而不是无限数量。我们将上限为n的ReLU单位称为ReLU-n单位。

http://www.cs.utoronto.ca/~kriz/conv-cifar10-aug2010.pdf

由于它源于论文,我怀疑他们用不同的n进行了测试,并使用n=6获得了最好的结果。

票数 63
EN

Stack Overflow用户

发布于 2020-10-03 00:45:17

如果您想要一个不同的数字,例如,如果您对二进制数据使用硬编码权重并希望使用ReLU1(),则可以按如下方式实现:

代码语言:javascript
复制
class ReLU1(nn.Module):
    def forward(self, x):
        return F.relu6(x * 6.0) / 6.0
代码语言:javascript
复制
class ReLUX(nn.Module):
    def __init__(self, max_value: float=1.0):
        super(ReLUX, self).__init__()
        self.max_value = float(max_value)
        self.scale     = 6.0/self.max_value

    def forward(self, x):
        return F.relu6(x * self.scale) / (self.scale)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47220595

复制
相关文章

相似问题

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