我想训练一个具有多个输出层的网络。
in->hidden->out 1
->out 2
这是可能的吗?如果可以,我该如何设置数据集和训练器来进行训练。
我想训练一个具有多个输出层的网络。
in->hidden->out 1
->out 2
这是可能的吗?如果可以,我该如何设置数据集和训练器来进行训练。
如果您想要将输出分割为多个SoftMax区域,您可以使用PyBrain提供的PartialSoftmaxLayer
。
请注意,它仅限于相同长度的切片,但是如果您需要自定义输出层,则其代码可以为您提供灵感:
https://github.com/pybrain/pybrain/blob/master/pybrain/structure/modules/softmax.py
对你作为程序员来说可能需要更多的工作,但如果你想要两个不同的输出,你可以将它们连接成一个向量,并将其用作网络的输出。
in --> hidden --> concatenate([out1, out2])
这种方法可能存在一个显著的缺点,即如果两个输出具有不同的比例,则串联将扭曲您用于训练网络的误差度量。
然而,如果您能够使用两个单独的输出,则仍然需要解决此问题,可能是通过以某种方式加权使用的两个误差度量来解决。
解决此问题的潜在方法包括定义自定义误差度量(例如,使用加权平方误差或加权交叉熵的变体)和/或标准化两个输出数据集,使它们存在于共同的比例尺中。
不是的。你可以有多个隐藏层,就像这样
输入 -> 隐藏层1 -> 隐藏层2 -> 输出
或者,你可以在单个输出层中有多个输出神经元。
从技术上讲,你可以设置任何神经元和层的排列方式,以任何你喜欢的方式连接它们,并称之为任何你想要的名称,但以上是一般的做法。