【问题标题】:Pybrain neural network step transfer functionPybrain 神经网络阶跃传递函数
【发布时间】:2012-12-18 19:14:02
【问题描述】:

有人可以告诉我如何在 pybrain 中实现步进激活功能吗?

例如。

def stepActivationFunction(n):
    if n > 0.5: return 1.
    else: return 0.

我似乎在pybrain.structure.modules 中找不到任何实现?

谢谢

编辑

我现在了解到您可以扩展 pybrain 并创建自己的层。但是,我仍然不确定如何根据文档执行此操作。有人可以向我展示如何创建一个实现步进激活功能的层的示例吗?

【问题讨论】:

  • 你能告诉我一个如何使用上述函数作为传递函数的例子吗?我不完全了解如何从文档中执行此操作:(
  • 跟着源码,我到了nullege.com/codes/show/…。我相信你应该很清楚。
  • @mmgp,我在理解文档时遇到了一些实际问题,您能否为我提供一个简单的示例来帮助我入门?非常感谢

标签: python machine-learning neural-network pybrain


【解决方案1】:

如果您想在经过反向传播训练的多层网络中使用它,那么这是不可能的。阶跃函数不可(sub)可微,这是反向传播算法的要求。

最接近阶梯函数的是

f(x) = max(-1, min(x, 1))

它会剪切x 的值以生成介于 1 和 -1 之间的值(如果您愿意,可以将其更改为 0 和 1)。这个函数有一个微分

f'(x) = 1 if -1 < x < 1
        0 otherwise

【讨论】:

  • 我将使用该层作为输出层,隐藏层将使用 sigmoid 函数。我可以在输出层使用阶跃函数吗?
  • @Relax_Im_A_Quant:没有。输出激活函数必须是可微分的,以计算隐藏到输出层的梯度。根据任务的不同,您可以使用在hinge loss 下训练的线性输出单元来近似步长单元。我对 PyBrain 不是很熟悉,所以我不确定它是否允许激活函数和损失函数的解耦。
  • 太好了 - 感谢您的详细回复。如果我要使用不同的训练算法,例如遗传算法,那么我可以使用阶跃函数吗?
  • @Relax_Im_A_Quant:我想是的。但请注意,GA 并不比蛮力搜索更聪明,所以你不能指望它们能解决任何问题,除了玩具问题。
猜你喜欢
  • 2018-03-26
  • 1970-01-01
  • 2014-02-19
  • 2016-10-19
  • 2016-01-19
  • 1970-01-01
  • 2013-05-28
  • 2012-09-23
  • 1970-01-01
相关资源
最近更新 更多