我一直在使用 Lasagne 来解决使用卷积神经网络的二元分类问题。然而,虽然我得到了训练和验证损失的好(ish)结果,但我的验证和测试准确度始终保持不变(网络总是预测同一个类)。
我遇到过这个,和我一样的千层面问题。他们的解决方案是regression=True
在 Lasagne 上使用 Nolearn 进行设置。
有谁知道如何在千层面中设置相同的变量(因为我不想使用 Nolearn)?除此之外,有没有人解释为什么需要发生这种情况?
我一直在使用 Lasagne 来解决使用卷积神经网络的二元分类问题。然而,虽然我得到了训练和验证损失的好(ish)结果,但我的验证和测试准确度始终保持不变(网络总是预测同一个类)。
我遇到过这个,和我一样的千层面问题。他们的解决方案是regression=True
在 Lasagne 上使用 Nolearn 进行设置。
有谁知道如何在千层面中设置相同的变量(因为我不想使用 Nolearn)?除此之外,有没有人解释为什么需要发生这种情况?
从 nolearn看NeuralNet类的代码,看起来参数regression
在各个地方都有使用,但大多数时候它会影响输出值和损失的计算方式。
在regression=False
(默认)的情况下,网络输出具有最大概率的类,并使用分类交叉熵计算损失。另一方面,在 的情况下regression=True
,网络输出每个类的概率,并用输出向量上的平方误差计算损失。
我不是深度学习和 CNN 方面的专家,但这可能奏效的原因是,regression=True
如果误差梯度很小,对网络参数应用小的更改可能不会改变预测的类别和相关的损失,并且可能导致算法“认为”它已经收敛。但是,如果您查看类概率,小的参数变化会影响概率和由此产生的均方误差,并且网络将继续沿着这条路径前进,这最终可能会改变预测。
这只是一个猜测,不看代码和数据集很难判断。