GridSearchCV 似乎没有评估我为它提供的所有参数

GridSearchCV seems like does not evaluate all the parameters that I am providing for it

在我的代码中,我试图评估哪种参数组合最适合我的 ANN 准确性。但似乎我的 GridSearchCV 只检查每个参数的第一个值,returns 参数的最佳组合是这些参数值的第一个输入。 这是我的代码:

import keras
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import GridSearchCV
from keras.models import Sequential
from keras.layers import Dense

def build_classifier(optimizer):
    classifier = Sequential()
    classifier.add(Dense(6, kernel_initializer='uniform', activation='relu', input_dim= 11))
    classifier.add(Dense(6, kernel_initializer='uniform', activation='relu'))
    classifier.add(Dense(1, kernel_initializer='uniform', activation='sigmoid'))
    classifier.compile(optimizer = optimizer, loss = 'binary_crossentropy', metrics = ['accuracy'])
    return classifier

classifier = KerasClassifier(build_fn= build_classifier)
parameters = {'batch_size':[25,32], 'nb_epoch':[500,100], 'optimizer': ['rmsprop', 'adam']}

grid_search =GridSearchCV(estimator = classifier, param_grid= parameters, scoring= 'accuracy', cv=10)

grid_search= grid_search.fit(x_train, y_train)
best_parameters= grid_search.best_params_
best_accuracy=grid_search.best_score_

此时 returns 最好的参数是:批量大小= 25,时期 = 500 和优化器 = 'rmsprop'

现在,如果我将参数更改为:

parameters = {'batch_size':[25,32], 'nb_epoch':[100,500], 'optimizer': ['adam', 'rmsprop']}

it returns 最佳参数为 batch_size = 25,epoch=100 和 Optimizer =adam

在控制台中我看到了这个:

Epoch 1/1
7200/7200 [==============================] - 0s 49us/step - loss: 0.6335 - accuracy: 0.7928
Epoch 1/1
7200/7200 [==============================] - 0s 52us/step - loss: 0.6166 - accuracy: 0.7937
Epoch 1/1
7200/7200 [==============================] - 0s 59us/step - loss: 0.5946 - accuracy: 0.7956
Epoch 1/1
7200/7200 [==============================] - 0s 58us/step - loss: 0.6066 - accuracy: 0.7942
Epoch 1/1
7200/7200 [==============================] - 0s 61us/step - loss: 0.5923 - accuracy: 0.7932
Epoch 1/1
7200/7200 [==============================] - 0s 61us/step - loss: 0.5829 - accuracy: 0.7971
Epoch 1/1
7200/7200 [==============================] - 0s 54us/step - loss: 0.6069 - accuracy: 0.7924
Epoch 1/1
7200/7200 [==============================] - 0s 57us/step - loss: 0.6115 - accuracy: 0.7921
Epoch 1/1
7200/7200 [==============================] - 0s 58us/step - loss: 0.5892 - accuracy: 0.7944
Epoch 1/1
7200/7200 [==============================] - 0s 59us/step - loss: 0.5905 - accuracy: 0.7951
Epoch 1/1
7200/7200 [==============================] - 0s 59us/step - loss: 0.5726 - accuracy: 0.7957
Epoch 1/1
7200/7200 [==============================] - 0s 59us/step - loss: 0.5940 - accuracy: 0.7944
Epoch 1/1
8000/8000 [==============================] - 0s 55us/step - loss: 0.5755 - accuracy: 0.7946

为什么总是epoch 1/1??

纪元的参数称为 epochs,而不是 nb_epoch,这是 Keras 2.0 中的更改。您需要输入正确的名称,否则它将假定一个值。

关于最佳参数,训练神经网络总是存在一些随机性(由于随机权重初始化),因此您不应像现在这样解释结果,因为这可能只是偶然。