Skorch训练期间训练损失没有变化

时间:2019-11-18 17:14:06

标签: pytorch skorch

我在Skorch中使用GridSearchCV,但是在某些循环中,火车损失/ valacc值没有变化,而对于某些情况,则是。我使用的是非常基本的参数,因此结果应该相当相似。例如 在此示例中,什么都没有发生,并且直到最后一个时期都完全一样

  epoch    train_loss    valid_acc    valid_loss     dur
-------  ------------  -----------  ------------  ------
      1        0.6931       0.4961        0.6931  0.0885
      2        0.6931       0.4961        0.6931  0.0881
      3        0.6931       0.4961        0.6931  0.0921
      4        0.6931       0.4961        0.6931  0.0815
      5        0.6931       0.4961        0.6931  0.0790
      6        0.6931       0.4961        0.6931  0.0685
      7        0.6931       0.4961        0.6931  0.0853
      8        0.6931       0.4961        0.6931  0.0951
      9        0.6931       0.4961        0.6931  0.0873
     10        0.6931       0.4961        0.6931  0.1011
     11        0.6931       0.4961        0.6931  0.0944
     12        0.6931       0.4961        0.6931  0.0839
     13        0.6931       0.4961        0.6931  0.0758
     14        0.6931       0.4961        0.6931  0.0754
     15        0.6931       0.4961        0.6931  0.0832

但是在下一次迭代中,一切正常,并且trainloss / validloss有所改善

 epoch    train_loss    valid_acc    valid_loss     dur
-------  ------------  -----------  ------------  ------
      1        0.6931       0.4992        0.6931  0.0859
      2        0.6930       0.5429        0.6921  0.0925
      3        0.6907       0.5491        0.6840  0.0861
      4        0.6808       0.6147        0.6689  0.0797
      5        0.6633       0.6318        0.6484  0.0734
      6        0.6413       0.6989        0.6280  0.0757
      7        0.6224       0.7114        0.6168  0.0964
      8        0.6105       0.7254        0.6153  0.0949
      9        0.6068       0.7379        0.6112  0.0836
     10        0.5935       0.7426        0.6048  0.1007
     11        0.5811       0.7441        0.6021  0.0835
     12        0.5693       0.7644        0.5954  0.0776
     13        0.5612       0.7488        0.6001  0.0773
     14        0.5548       0.7878        0.5763  0.0806
     15        0.5338       0.7691        0.5811  0.0750

有人知道背后的原因吗?
(还有一种方法可以阻止fit(x,y)打印所有循环吗?)

ann = NeuralNetBinaryClassifier(module=Net66,max_epochs=20, lr = 0.01, optimizer=torch.optim.Adam,
criterion=nn.BCELoss,batch_size=800, iterator_train__shuffle=True)

params = {
    'lr': [0.001, 0.002],
    'max_epochs': [25, 50],
}

gs = GridSearchCV(ann, params, refit=False, scoring='accuracy', cv =2)

gs.fit(X, y)


1 个答案:

答案 0 :(得分:0)

很难不看架构或数据就给出正确的答案,但是有很多原因导致预测不变。调试的最佳方法是直接查看预测,即使用net.forward(X_train)获取网络的预测或通过net.predict_proba(X_train)查看概率。可能是初始化问题,您的网络始终会预测1或0。可能是模块/数据预处理或数据拆分中的错误。

  

(还有一种方法可以阻止fit(x,y)打印所有循环吗?)

是的,您可以将verbose=0传递到NeuralNet以使日志记录静音。