训练神经网络时如何在准确性/减少损失方面给予特定输出更高的优先级

Posted

技术标签:

【中文标题】训练神经网络时如何在准确性/减少损失方面给予特定输出更高的优先级【英文标题】:How to give specific outputs higher priority in accuracy / reducing loss, when training Neural Network 【发布时间】:2019-12-04 22:09:28 【问题描述】:

所以我正在处理一个具有 10 个输入和一个输出的简单神经网络。我可以有尽可能多的隐藏层,但是我使用的是 2。我还使用了“mean_squared_error”损失函数和 RMSProp 优化器。

无论如何,我的问题是,假设我的输出值是这样的: [0,0,3,0,0,0,5,0,0,2,0...] 等。请注意,值 0 重复的频率更高。所以我想做的是尝试强制神经网络在“输出端非零值”的情况下学习得更好。给予这些价值观更多的“重要性”。 因为如果我使用 'mean_squared_error',训练会尝试根据整个数据集进行优化,这将主要导致优化案例,其中 0 是输出值。

编辑: 我正在处理的问题可能是物理系统的简单建模。假设我们有一个已知输入的黑盒系统。这个黑盒有一个输出(让我们说温度)。根据我们的输入和相应的输出,我们可以使用神经网络作为“黑盒”对系统进行建模,然后使用经过训练的 NN 来预测温度。

编辑: 所以我现在使用不同的训练/验证集。我怀疑前一个有问题。 现在我得到了类似上图的东西(请查看即时峰值) 是什么原因造成的?

请记住,我在神经网络方面没有经验,因此欢迎任何反馈:)

【问题讨论】:

【参考方案1】:

ML 中有两个重要的概念。

“欠拟合”和“过拟合”,在你的情况下我认为它是欠拟合的。

解决这个问题有一些方法:

    通过添加更多层和单元使您的模型更加复杂 如果您使用正则化术语,请减小它们的值 使用更多功能(如果有的话)

希望对你有所帮助。

【讨论】:

嗨 mehran rafiee。感谢您的反馈意见。我确定不会处理过度拟合,因为测试数据具有与训练/验证数据相同的类型/误差幅度。所以我们在同一页面上:) 可能是存在“欠拟合”的问题。我试过你 1.) 建议,但没有改善。我不确定您所说的 2.) 点是什么意思?你能不能快点指出我?大约3.),如果有特征,你指的是“输入到NN”,那么答案是“是的,我试过了”:) @AljazJelen 更多功能不同于更多数据。例如,在数据框中,我们将讨论列而不是行(数据点)。还有你用的是什么算法? 关于我的数字 2。:有一些正则化术语,如 L1 或 L2,可能有助于防止过度拟合问题。可以与我们分享您的 NN 架构吗?如果没有,您是否尝试过在您的 NN 层中进行批量标准化?你试过用“Adam”作为优化器,用“crossentropy”作为损失函数吗? @Mehran,我正在处理回归,所以我认为交叉熵会起作用。 NN架构,我可以和你分享,但我一直在改变它,以达到更好的效果。现在我有 4 个隐藏层,其中有 [50,50,20,10] 个神经元,一个在输出级。所有隐藏层都是 Dense 并具有 Tanh 激活函数(因为输入已归一化),而输出层具有 ReLu 激活函数。【参考方案2】:

如果您的输出是整数[0,0,3,0,0,0,5,0,0,2,0...],即classes,您可能会进行分类。所以,你的损失应该是categorical_crossentopy。在这种情况下,有两种方法可以做你想做的事:

1- 您可以使用 SMOTE(Synthetic Minority Oversampling)技术,使非零类获得与零类相同的权重。对于二进制类:

from imblearn.over_sampling import SMOTE
from imblearn.combine import SMOTEENN

sm = SMOTEENN()
x, y = sm.fit_sample(X, Y)

2- 您还可以调整 Keras 类的权重:

class_weight = 0: 1.,1: 30.

model.fit(X, Y, nb_epoch=1000, batch_size=16, class_weight=class_weight)

【讨论】:

嗨 Rubens_ZImbres,感谢您的回答。首先我想指出,NN 的输出不是整数数组。它是一个简单的整数。由于保密,我不能详细说明,但我在原帖中添加了更多解释。所以我想,我不是在处理分类问题。

以上是关于训练神经网络时如何在准确性/减少损失方面给予特定输出更高的优先级的主要内容,如果未能解决你的问题,请参考以下文章

培训减少,验证 - 增加。培训损失,验证损失减少

神经网络 - Softmax 交叉熵损失减少对应于准确性降低

如何解释损失和准确性的增加

验证损失不断减少,而训练损失在 3 个 epoch 后开始增加

我应该使用损失或准确性作为提前停止指标吗?

如何在 Keras 中绘制 MLP 模型的训练损失和准确度曲线?