Pytorch ConvNet loss保持不变,只有一个class被预测

Pytorch ConvNet loss remains unchanged and only one class is predicted

我的 ConvNet 只预测一个 class 并且损失保持不变。

我试过以下方法:

我不确定从这里到哪里去。似乎无论我尝试什么,神经网络总是预测相同的 class(我已经能够通过不成比例地抛出权重来预测另一个 class)

下面是 运行 我的程序的输出。它应该包含所有相关信息,以便提出一些关于如何修复它的想法。如果您需要查看一些源代码或对数据集的外观感到好奇,请询问。

非常感谢任何帮助。我已经被这个问题难住了很长一段时间了。谢谢!

Train dataset length: 27569
Test dataset length: 4866

Image preprocessing: 
None
Input dimensions: 28 X 28
Output dimension: 2

Model: Simple
NeuralNetwork(
  (flatten): Flatten(start_dim=1, end_dim=-1)
  (linear_relu_stack): Sequential(
    (0): Linear(in_features=784, out_features=512, bias=True)
    (1): ReLU()
    (2): Linear(in_features=512, out_features=512, bias=True)
    (3): ReLU()
    (4): Linear(in_features=512, out_features=2, bias=True)
    (5): ReLU()
  )
)

Optimizer: Adam
Learning rate: 0.0001

Loss function: CEL
class weights: tensor([0.3481, 0.6519], device='cuda:0')
Multiplicative factor of learning rate decay: 0.0005

Train Epoch: 1 [0/27569 (0%)]   Loss: 3785.907959
Train Epoch: 1 [6400/27569 (23%)]   Loss: 0.693147
Train Epoch: 1 [12800/27569 (46%)]  Loss: 0.693147
Train Epoch: 1 [19200/27569 (70%)]  Loss: 0.693147
Train Epoch: 1 [25600/27569 (93%)]  Loss: 0.693147

Test set: Average loss: 0.0110, Accuracy: 3172/4866 (65%)

actual count: [3172, 1694]
predicted count: [4866, 0]

在最后一个 Linear 层(logits 的来源)之后有一个 ReLU 是非常罕见的。考虑删除它。

另外,可能你的学习率太高了。你可以试着稍微调整一下。检查迭代之间的损失是否平滑减少(这在大多数情况下是理想的),否则减少它