Mon modèle commence à former et lors de l'exécution de quelque temps, cela donne une erreur: - IndexError: Index 37 est hors limites pour l'axe 0 avec la taille 37
Il exécute correctement pour mon modèle sans utiliser de gridsearchcv avec des paramètres fixes p>
Voici mon code P> 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, nb_layers,unit):
classifier = Sequential()
classifier.add(Dense(units = unit, kernel_initializer = 'uniform', activation = 'relu', input_dim = 14))
i = 1
while i <= nb_layers:
classifier.add(Dense(activation="relu", units=unit, kernel_initializer="uniform"))
i += 1
classifier.add(Dense(units = 38, kernel_initializer = 'uniform', activation = 'softmax'))
classifier.compile(optimizer = optimizer, loss = 'sparse_categorical_crossentropy', metrics = ['accuracy'])
return classifier
classifier = KerasClassifier(build_fn = build_classifier)
parameters = {'batch_size': [10,25],
'epochs': [100,200],
'optimizer': ['adam'],
'nb_layers': [5,6,7],
'unit':[48,57,76]
}
grid_search = GridSearchCV(estimator = classifier,
param_grid = parameters,
scoring = 'accuracy',
cv=5,n_jobs=-1)
grid_search = grid_search.fit(X_train, y_train)
best_parameters = grid_search.best_params_
best_accuracy = grid_search.best_score_
3 Réponses :
L'erreur en Python, si vous avez un objet comme une matrice ou une liste, qui a des éléments indexés numériquement, s'il a des éléments Donc, si vous avez 37 éléments, vous ne pouvez récupérer que des éléments de 0 à 36. P> indexerror: index 37 est hors limites pour l'axe 0 avec la taille 37 code> signifie qu'il n'y a pas d'élément avec index 37 dans votre objet. P>
N code>, des index ira de
0 code> sur
N-1 code> (c'est le cas général, à l'exception du réindexage dans les données de données). P>
Ceci est un classificateur multi-classes avec un grand nombre de classes (38 classes). Il semble que GridSearchCV n'élève pas votre jeu de données par échantillonnage stratifié, peut être parce que vous n'avez pas suffisamment de données et / ou votre ensemble de données n'est pas équilibré de la classe. P>
Selon le Documentation : p>
Pour les entrées entier / aucune, si l'estimateur est un classificateur et y est StratietDkold est utilisé soit binaire ou multiclasse. Dans tous les autres Les cas, kilaques sont utilisés. P> blockQuote>
En utilisant
Catégorical_crossentropy strong>, KerasClassificateur convertira des cibles ( Un vecteur de classe (entiers)) à la matrice de classe binaire utilisant keras.utils.to_catégorie . Comme il y a 38 classes, chaque cible sera convertie en un vecteur binaire de dimension 38 (index de 0 à 37). P> Je suppose que dans certaines divisions, le jeu de validation n'a pas d'échantillons de toutes les 38 classes. Les cibles sont donc converties en vecteurs de dimension <38, mais comme le gridsearchcv est équipé d'échantillons de toutes les 38 classes, il s'attend à Vecteurs de dimension = 38, qui provoque cette erreur. P>
Regardez la forme de votre y_train. Il doit s'agir d'une sorte d'une sorte de chaude avec forme (, 37) p>
Bienvenue à tellement; Veuillez copier et coller le message d'erreur dans votre message sous Texte B> - voir pourquoi Une image de votre exception n'est pas utile .