【问题标题】:Perceptron Sigmoid感知器 Sigmoid
【发布时间】:2015-02-18 09:35:55
【问题描述】:

您好,我正在尝试创建一个程序,该程序将根据感知器算法计算权重。我现在一切都在工作,但在最基本的情况下,它是一个阶梯函数,它是单层的。在我转向多层之前,我试图使它成为最优的和 sigmoid 的。

所以这些是我的问题,我对 sigmoid 有一个大致的了解,但我找不到任何关于如何使线最优的信息,所以它与数据点的距离相等。有人知道吗?

net = 0;
for(i=0; i<N; i++)
{
    net = net + (x[i] * w[i]);      //Calculates weighted sum
}

if(net >= threshold) output =  1;     //Finds the output based on the net
if(net <  threshold) output = -1;

这是我当前查找“y”变量的代码,我在这里将其称为输出,它使用简单的步进函数找到它,阈值 = 0。如何将其转换为 sigmoid?

【问题讨论】:

    标签: c++ neural-network openframeworks perceptron


    【解决方案1】:

    以下可能有效:

    output = 1 / (1 + exp(-net));
    

    您可能还喜欢tanh(net)1 / (1 + abs(net)) 函数,根据this answer,它们要快得多。

    【讨论】:

    • 我认为您的意思是“output = net / (1 + exp(-net));”,但是我认为这行得通,我猜这两个 if 语句是使它成为 step 函数的原因,不知道该怎么处理他们,但现在我明白了。有没有办法将输出值四舍五入不超过 3-5 位?不尝试打印它,只是存储它。
    • @maty 原来的 sigmoid 函数和我写的完全一样,但你也可以使用1 / (1 + exp(-beta * net)),其中 beta 是斜率参数。 Sigmoid 将为您提供从 0 到 1 的输出值,tanh 将提供从 -1 到 1 的输出值。您也可以缩放它们,即 0.5 * tanh(net) + 0.5 如果您需要从 tanh 以 (0, 1) 间隔输出。跨度>
    猜你喜欢
    • 2015-01-27
    • 2014-06-20
    • 2017-10-07
    • 2015-05-09
    • 2018-09-20
    • 2018-07-29
    • 2021-03-11
    • 2015-08-14
    • 2018-10-04
    相关资源
    最近更新 更多