多输出神经网络中的训练误差和验证误差

3
我正在开发一个研究神经网络的程序,我现在了解将数据集分为三个集合(训练、验证和测试)的区别。我的网络可能只有一个输出或多个输出,这取决于数据集和问题。学习算法是反向传播。
所以,问题基本上是我对每个错误和计算方式感到困惑。
哪个是训练误差?如果我想使用MSE,那么是(期望值 - 输出值)^ 2吗?但是,如果我的网络有两个或更多输出,训练误差将是所有输出的总和吗?
然后,验证误差只是使用验证数据集计算输出,将得到的结果与期望结果进行比较,这将给出一个误差,它的计算方式与训练误差相同吗?对于多个输出呢?
最后,不是很清楚,什么时候应该运行验证?我在某个地方读到过可以每5个周期运行一次验证,但是是否有任何规则?
提前感谢您的时间!
1个回答

5

对于多个输出神经元,为了计算训练误差,在每个epoch/迭代中,需要取出每个输出值,将其与该神经元的目标值进行比较,然后平方,对于其他输出神经元也做同样的操作,最后求均值。

例如有两个输出神经元,

MSE = (|op1 - targ1|^2 + |op2 - targ2|^2 ) / 2

训练误差、验证误差和测试误差的计算方式相同。不同之处在于它们何时运行以及如何使用。
通常会在每个训练epoch上检查完整的验证集。或许可以每5个epoch运行一次以加快计算速度。
验证测试/检查结果不用于更新权重,仅用于决定何时停止训练。它用于判断网络是否已推广到数据,而不是过拟合。

请查看此问题中第一个答案中的伪代码
神经网络中训练集、验证集和测试集之间的区别是什么?


你的回答非常有用。现在,如果每个时期都计算完整的验证集,假设我们有70个样本进行训练,20个用于验证和10个用于测试。那么一个时期将是70个训练集+20个验证集,对吗?现在,在每个时期中,我会有70个不同的训练错误吗?还有20个验证错误吗?或者我也会计算训练误差(70个的平均值)和验证误差(20个的平均值),这些将是我一个时期的训练误差和验证误差吗?(我希望我能清楚地解释我的问题) - gkapellmann
3
不。在一个时代中,你有一个训练误差和一个验证误差。它们在每个时代都会不同。训练误差用于更新权重。验证误差则不用。通常可使用验证误差退出训练,当两个误差开始分叉的合适点。这是为了避免过度拟合。请再次查看我给出链接中的伪代码。 - andrelucas

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