【问题标题】:Negative Loss function when using cross_val_score in sklearn/keras. Works when not using k fold在 sklearn/keras 中使用 cross_val_score 时的负损失函数。不使用 k 折叠时工作
【发布时间】:2018-03-17 04:41:28
【问题描述】:

我正在尝试实现一个模型,该模型接收 167 个分类变量(0 或 1)的数组,并输出介于 0 和 1 之间的估计值。可用的数据点超过 300 个。

该模型在使用基本模型时有效,如下所示:

classifier = Sequential()
classifier.add(Dense(units = 80, kernel_initializer = 'uniform', activation = 'relu', input_dim = 167))
classifier.add(Dense(units = 1, kernel_initializer = 'uniform', activation = 'sigmoid'))

classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])

classifier.fit(X_train, y_train, batch_size = 10, epochs = 200)

y_pred = classifier.predict(X_test)

输出类似于:

Epoch 105/200
253/253 [==============================] - 0s - loss: 0.5582 - acc: 0.0079         
Epoch 106/200
253/253 [==============================] - 0s - loss: 0.5583 - acc: 0.0079

不幸的是,当我尝试使用交叉验证时,模型停止工作,损失函数变得很大且为负数。代码如下:

def build_classifier():
    classifier = Sequential()
    classifier.add(Dense(units = 80, kernel_initializer = 'uniform', activation = 'relu', input_dim = 167))
    classifier.add(Dense(units = 1, kernel_initializer = 'uniform', activation = 'sigmoid'))
    classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
    return classifier
classifier = KerasClassifier(build_fn = build_classifier, batch_size = 10, epochs = 100)
accuracies = cross_val_score(estimator = classifier, X=X_train, y=y_train, cv=3,n_jobs=1)

输出如下:

Epoch 59/100
168/168 [==============================] - 0s - loss: -1106.9519 - acc: 0.0060        
Epoch 60/100
168/168 [==============================] - 0s - loss: -1106.9519 - acc: 0.0060  

我玩弄了不同的参数,但我似乎找不到导致问题的原因。仍在学习,因此非常感谢任何帮助。

【问题讨论】:

    标签: python scikit-learn keras


    【解决方案1】:

    如果数据稀疏,就会发生这种情况。很多 NaN 和 Inf 都可能导致此问题。如果您正在进行 3 折验证,则可能在其中一个折中,所选数据不包含足够的信息。可能的解决方案是:

    1. 更改随机种子。
    2. 增加数据集。

    【讨论】:

      猜你喜欢
      • 2021-01-01
      • 2015-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-10
      • 2019-09-28
      • 1970-01-01
      相关资源
      最近更新 更多