首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多输出神经网络

多输出神经网络
EN

Stack Overflow用户
提问于 2014-10-20 20:38:30
回答 1查看 3.2K关注 0票数 1

直到知道我只使用神经网络对单个输出进行分类之前,我为每个类设置了一个输出神经元,并检查哪个神经元具有最高/最低的激活率。

我要做的是检测一个模式,而不是输出单个值(类或激活值),而是输出多个值。例如,

代码语言:javascript
复制
[0,5 0,5 0,5] -> [0,5 0,5 0,5]
[1 1 1] -> [1 1 1]
[2 2 2] -> [-1 -1 -1]

所以,我想知道的是,我是否可以使用一个具有3个输出的网络,而不是检查激活,而是使用所有的输出作为输出模式?

EN

回答 1

Stack Overflow用户

发布于 2014-10-20 21:59:12

是的,你可以使用具有多个输出的神经网络。基本上,你有两种可能这样做:

  • 使用一个简单的分解,即根据响应分离您的训练集,并训练三个年,其中每个年都有一个输出。但我想这不是你要找的。
  • 训练一个真正的多输出神经网络。在这种情况下,对于两个隐层神经网络,输入层的神经元权重对于每个输出是相同的,而输出层的权重是特定于每个输出的。在这种情况下,您必须结合三个输出的反向传播过程。在一种简单的方法中,您可以通过随后对每个输出应用一个反向传播迭代来做到这一点,直到您希望获得收敛。为了以一种合理的方式这样做,您可能必须以一种适当的方式来扩展您的响应(否则,一个输出可能会主导另一个输出)。

同样,以下是三个输出的基本过程:

  1. 将训练集分成三组,每组都有一个反应。标准化每一套。
  2. 将一个反向传播迭代应用于第一个数据集,然后一个应用到第二个数据集,最后一个应用到第三个数据集。对于每个输入层,使用相同的输入层权重。
  3. 重复2,直到收敛(--不管你怎么定义它。应该类似于一维输出过程。)

然而,如前所述,这只是多种优化方法中的一种可能性。

编辑:以上是简单的一维反向传播过程的扩展.这里的自由度是

(i)输入的处理顺序和误差项的计算,及

(ii)隐藏神经元的更新。

上面描述的变体将tha数据转换为[x_1, ..., x_N, y_1, ..., y_N, z_1, ..., z_N],并在每一步之后进行更新(这种更新方案通常称为Gauss)。另一个极端是存储错误项,并在处理完完整集后只更新一次。(Gauss版本的收敛速度通常要快一些)。

另一个变体--可能与标准反向传播最相似--是处理每个数据点的三个维度,即[x_1, y_1, z_1, ..., x_N, y_N, z_N],并在每个数据池之后更新(即每第三次迭代之后)。实际上,一个是进行一个三维梯度更新(由于梯度的线性性质,它可以做三次一维误差评估)。

总之,我们可以看到有很多种可能的优化方案,它们都是非常相似的,并且都可能导致相当相似的结果。

作为另一种选择,您也可以考虑使用极限学习机器。在这里,你必须只训练输出权重,而你却随机选择输入权重。由此,多响应问题自然分解为三个一维优化问题.

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26474500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档