Pytorch ConvNet损失保持不变且只预测一个类别

我的ConvNet只预测单一类别,且损失保持不变。

我尝试了以下方法:

  • 添加类别权重,使其与数据大小成比例(1 -(类别出现次数/总数据))
  • 调整学习率,试图找到一个最佳点
  • 调整gamma(学习率衰减的乘法因子)
  • 在损失函数中使用gamma,以及在损失函数中不使用gamma(主要一直在尝试Adam)
  • 尝试使用比目前使用的“简单”ConvNet更为复杂的ConvNet

我不知道接下来该怎么做。似乎无论我尝试什么,神经网络总是预测同一个类别(通过极度失衡的权重,我能够让它预测另一个类别)

以下是我运行程序的输出。其中应该包含所有相关信息,可以用来提出一些修复建议。如果您需要查看一些源代码或对数据集的外观感到好奇,请随时提出要求。

任何帮助都将不胜感激。我在这个问题上已经困惑了很长时间。谢谢!

Train dataset length: 27569Test dataset length: 4866Image preprocessing: NoneInput dimensions: 28 X 28Output dimension: 2Model: SimpleNeuralNetwork(  (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: AdamLearning rate: 0.0001Loss function: CELclass weights: tensor([0.3481, 0.6519], device='cuda:0')Multiplicative factor of learning rate decay: 0.0005Train Epoch: 1 [0/27569 (0%)]   Loss: 3785.907959Train Epoch: 1 [6400/27569 (23%)]   Loss: 0.693147Train Epoch: 1 [12800/27569 (46%)]  Loss: 0.693147Train Epoch: 1 [19200/27569 (70%)]  Loss: 0.693147Train Epoch: 1 [25600/27569 (93%)]  Loss: 0.693147Test set: Average loss: 0.0110, Accuracy: 3172/4866 (65%)actual count: [3172, 1694]predicted count: [4866, 0]

回答:

在最后一个Linear层(即logits来源处)之后使用ReLU是非常不常见的。考虑将其移除。

此外,您的学习率可能过高。可以尝试稍作调整。检查损失是否在迭代之间平滑下降(在大多数情况下这是理想的),否则请降低学习率。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注