-1
votes

J'entraînais un modèle d'apprentissage d'Ann Machine à l'aide de GridSearchCv et j'ai été bloqué avec une indexError dans GridSearchCV

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>

 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_


1 commentaires

Bienvenue à tellement; Veuillez copier et coller le message d'erreur dans votre message sous Texte - voir pourquoi Une image de votre exception n'est pas utile .


3 Réponses :


0
votes

L'erreur indexerror: index 37 est hors limites pour l'axe 0 avec la taille 37 signifie qu'il n'y a pas d'élément avec index 37 dans votre objet.

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 N , des index ira de 0 sur N-1 (c'est le cas général, à l'exception du réindexage dans les données de données).

Donc, si vous avez 37 éléments, vous ne pouvez récupérer que des éléments de 0 à 36.


0 commentaires

0
votes

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.

Selon le Documentation :

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.

En utilisant Catégorical_crossentropy , 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).

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.


0 commentaires

0
votes

Regardez la forme de votre y_train. Il doit s'agir d'une sorte d'une sorte de chaude avec forme (, 37)


0 commentaires