簡體   English   中英

在sklearn / keras中使用cross_val_score時的負損失函數。 不使用k折時有效

[英]Negative Loss function when using cross_val_score in sklearn/keras. Works when not using k fold

我正在嘗試實現一個模型,該模型采用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  

我使用了不同的參數,但是似乎找不到導致此問題的原因。 仍在學習中,因此非常感謝您的幫助。

如果數據稀疏,可能會發生這種情況。 許多NaN和Infs都可能導致此問題。 如果您要進行3折驗證,則在其中一項折中,所選數據可能包含的信息不足。 可能的解決方案可以是:

  1. 更改隨機種子。
  2. 增加數據集。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM