【问题标题】:Neural Network Output :Scaling the output range神经网络输出:缩放输出范围
【发布时间】:2012-02-21 07:29:26
【问题描述】:

我的神经网络(3 层)的输出层使用 sigmoid 作为激活,它仅在 [0-1] 范围内输出。但是,如果我想针对超出 [0-1] 的输出进行训练,比如以千计,我该怎么办?

例如,如果我想训练

输入---->输出

0 0 ------> 0

0 1 ------> 1000

1000 1 ----> 1

1 1 -------> 0

我的程序适用于 AND、OR、XOR 等。因为输入输出都是二进制的。

有一些建议可以使用,

激活:


y = lambda*(abs(x)1/(1+exp(-1(x))))

激活导数:


lambda*(abs(y)y(1-y))

对于上述训练模式,这并没有收敛(如果我没有做错任何事)。请问有什么建议吗?

【问题讨论】:

    标签: matlab artificial-intelligence neural-network


    【解决方案1】:

    对于分类问题,习惯上在输出层使用sigmoid/logistic激活函数来得到[0,1]范围内的合适概率值;再加上多类分类的 1-of-N 编码,每个节点输出将代表实例属于每个类值的概率。

    另一方面,如果您有回归问题,则无需在输出上应用额外的函数,您只需获取原始线性组合输出即可。网络将自动学习权重以提供您拥有的任何输出值(即使是数千个)。

    您还应该注意的是缩放输入特征(例如,通过将所有特征标准化到范围 [-1,1])。

    【讨论】:

    • 您好,谢谢!但是为了实现您对回归案例的建议,我需要如何更改我的代码,例如,我使用反向传播,我使用了 sigmoid 的导数来传播错误。(speech.sri.com/people/anand/771/html/node37.html),我使用了这个算法,现在如果我在输出中不使用任何 sigmoid,在这种情况下会是什么?如果我只想训练所提到的模式,那么哪种类型的拓扑会更好?回归还是分类?我的意思是你会怎么做?
    • 代替输出层中的sigmoid激活函数,使用恒等函数f(x) = x。此外,您尝试使用确定您遇到的问题类型的神经网络预测的目标属性:分类/名义值(分类,例如:将电子邮件分类为垃圾邮件/非垃圾邮件)与数值(回归,例如:预测股票价格)..
    【解决方案2】:

    将输出放大到您想要的值,或者将训练数据归一化回 [0,1] 的范围是显而易见的解决方案。我也想不出任何先验的原因,即缩放需要是线性的(尽管它显然希望单调增加),所以你可以在这里修改对数函数。

    你在解决什么样的问题,你有这么大的范围?

    【讨论】:

    • 1.我必须缩放每个神经元的输出吗?还是只是输出神经元? 2. 如果我规范化输入,我是否也必须规范化输出?以及如何标准化输出?连同输入? 3. 如何修改日志功能? 4. 我的数据是分类的,我需要训练上面提到的那个模式,你有什么建议?
    • 您的输入就是它们的样子;我会让他们一个人呆着。您要做的是将输出神经元提供的输出范围与训练数据指示的值相匹配。您可以通过直接更改输出神经元的传递函数,或在需要时按比例放大它们,或通过按比例缩小训练数据指示的输出来做到这一点。在某种意义上,这些都是等价的。神经元被单独留下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 2017-06-23
    • 2015-02-23
    • 1970-01-01
    • 2017-11-21
    • 2012-01-16
    相关资源
    最近更新 更多