PyBrain训练多输出模块

4

我想训练一个具有多个输出层的网络。

in->hidden->out 1
          ->out 2

这是可能的吗?如果可以,我该如何设置数据集和训练器来进行训练。

3个回答

1

0

对你作为程序员来说可能需要更多的工作,但如果你想要两个不同的输出,你可以将它们连接成一个向量,并将其用作网络的输出。

in --> hidden --> concatenate([out1, out2])

这种方法可能存在一个显著的缺点,即如果两个输出具有不同的比例,则串联将扭曲您用于训练网络的误差度量。

然而,如果您能够使用两个单独的输出,则仍然需要解决此问题,可能是通过以某种方式加权使用的两个误差度量来解决。

解决此问题的潜在方法包括定义自定义误差度量(例如,使用加权平方误差或加权交叉熵的变体)和/或标准化两个输出数据集,使它们存在于共同的比例尺中。


1
我的当前需求是2个输出softmax层,因此我无法将它们连接起来。然而,在其他情况下,我可以将我的输出简单地合并到一个层中。至于比例,当然有许多缩放方法可以确保这不是问题。 - Firestrand

0

不是的。你可以有多个隐藏层,就像这样

输入 -> 隐藏层1 -> 隐藏层2 -> 输出

或者,你可以在单个输出层中有多个输出神经元。

从技术上讲,你可以设置任何神经元和层的排列方式,以任何你喜欢的方式连接它们,并称之为任何你想要的名称,但以上是一般的做法。


我的问题是关于输出层而不是隐藏层,我的问题是如何训练它们。似乎pybrain不允许训练多个输出层。 - Firestrand
问题是,如何计算训练误差?误差是理想输出和实际输出之间的差异。如果您有2个输出层,您会使用哪一个?如果同时使用两个,则基本上相当于将两个输出层的神经元合并为一个更大的层,正如@lmjohns3所提到的那样。 - andrelucas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接