2012-01-28 108 views
0

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

例如,如果欲培养

输入---->输出

0 0 ------> 0

0 1 ------> 1000

10001 ----> 1

1 -------> 0

我的程序适用于AND,OR,XORē由于输入输出都是二进制的。

有一些建议,使用,

活化:


Y =拉姆达*(ABS(X)1 /(1 + EXP(-1(X))))

衍生物活化的:


拉姆达*(ABS(Y)y(1-y))

这没有收敛为所述的训练模式(如果我没有做错什么)。有什么建议吗?

回答

3

对于分类问题,通常使用S形/逻辑激活函数中的输出层中的范围[0,1]到得到适当的概率值;再加上用于多类别分类的1-N编码,每个节点输出将表示实例属于每个类别值的概率。

另一方面,如果您有回归问题,则不需要在输出上应用其他函数,并且您可以取原始线性组合输出。网络会自动学习权重,以给出你拥有的任何输出值(甚至在数千)。

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

+0

嗨,谢谢!但为了实现你对回归情况的建议,我需要如何更改我的代码,例如,我使用反向传播,其中使用了sigmoid的派生词来传播错误(http://www.speech。 sri.com/people/anand/771/html/node37.html),我使用了这种算法,现在如果我不在输出中使用任何sigmoid,那么在那种情况下将会出现什么问题?如果我只想训练上述模式,哪种类型的拓扑结构会更好?回归还是分类?我的意思是你会做什么? – 2012-01-28 23:23:27

+0

而不是输出层中的S形启动函数,使用标识函数f(x)= x'。此外,它是您尝试使用神经网络预测的目标属性,它决定了您拥有的问题类型:分类/名义值(分类,例如:将电子邮件分类为垃圾邮件/非垃圾邮件)与数值(回归,前:预测股票价格).. – Amro 2012-01-28 23:41:39

0

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

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

+0

1.我必须缩放每个神经元的输出吗?或者只是输出神经元? 2.如果我正常化输入,我还必须正常化输出吗?以及如何正常化输出?一起输入? 3。我如何修改日志功能? 4.我的数据是分类的,我需要训练那个提到的模式,你会建议什么? – 2012-01-28 21:22:14

+0

你的投入是他们是什么;我会让他们独处。你要做的是将输出神经元提供的输出范围与训练数据指定的值相匹配。您可以通过直接更改输出神经元的传递函数,或者在需要时扩大它们或者通过缩小培训数据所指定的输出来完成此操作。从某种意义上说,这些都是等同的。神经元是孤立的。 – Novak 2012-01-28 22:17:11