我在玩Tensorflow,希望通过这样的方式训练权重,使神经元只有在某个范围内输出一个值时才会“激发”,当输出值超出该范围时,才输出0或接近0。在
我想通过使用“Sinc”(here)或“高斯”(here)作为激活函数来实现这一点。不幸的是,Tensorflow不支持这一点。在
我需要为此添加新的操作吗?Tensorflow确实支持实现“Sinc”或“Gaussian”所需的所有操作,因此它们也应该为训练实现梯度。在
我试过用这个方法,但是不知怎么的,神经网络的所有权重和偏差都是0。在
Tags:
您可以使用基本的TF操作来实现这两个功能。我不建议从数学角度(大量浅层局部最优)在神经网络中使用周期性激活函数(或“准周期性”——一般函数具有变化的导数符号),因此我不建议使用sinc。对于gaussians,您可能需要很好地处理初始化。这种“局部函数”最棘手的地方是它们很快就会变成0,因此你必须确保当你得到训练数据时,你的神经元激活处于“活跃”状态。使用基于点积的方法(如sigmoid、relu等)会更容易,因为你所要做的就是处理尺度。对于高斯人来说,你必须确保你的激活“到位”。在
例如,可以作为激活函数传递的sinc函数。有点乱,但很管用。在
高斯分布:
^{pr2}$除了上面Laine Mikael的回答,我发现这个特定的sinc实现在反向过程中给出
nan
。下面是一个基于如何在numpy中实现的替代方法:相关问题 更多 >
编程相关推荐