0
votes

Conversion de la classification binaire en multi-étiquettes?

J'essaie de convertir mon modèle de classification d'images binaires en Multilabel et j'ai eu des erreurs avec une matrice numpie en disant s'attend à ce que des valeurs 2-dimensions puissent que quelqu'un puisse m'aider à modifier le code.

J'ai essayé d'utiliser Multilabelbinazier mais je n'avais pas de chance avec qui que quelqu'un ne puisse personne ici m'aider avec ça?

erreurs # Utilisation xxx


1 commentaires

Qu'est-ce que vous voulez faire? Votre perte est toujours binaire_crossentropy afin que vous voulez donc prédire 2 classes? Ma devin initiale est que votre étiquette n'est pas la bonne forme. Dites que vous avez 4 cours, ne voulez-vous pas que la première étiquette soit [0,1,0,0] s'il s'agit de la deuxième classe?


3 Réponses :


1
votes

dépend de la manière dont vous préprogrammez vos étiquettes

Il y a trois points

1. premier: étiquette forme


Observez votre forme d'étiquette. De votre code, je suppose que votre forme d'étiquette doit être une dimensionnelle comme (5000,) Vous pouvez le voir à l'aide de étiquettes.shape . Pour ce faire, utilisez deux dimensions, utilisez ce xxx


2. SECONDRE ONE: Les unités de la dernière couche dense

Vous avez utilisé le nombre d'unités dans le dernier dense couche 2, donc essentiellement une classification multiclass se comporter comme une classification binaire. Je recommande si vous faites une classification binaire, utilisez 1 unité au dernier dense couche et activation autre que softmax . Si votre ensemble de données ait 3 ou plus de 3 classe, utilisez une couche dense avec le nombre de classes de sortie et softmax activation. Mais pour de tels cas, les étiquettes doivent être une fois codées à chaud .

3. Troisième: Modifier la fonction de perte


Si vous allez toujours utiliser la sortie 2 unité pour la dernière couche dense. Changez votre fonction de perte de binaire_crossentropy à Catégorical_crossentropy


0 commentaires

0
votes

dépend de votre version TF, mais vous devriez peut-être utiliser le fit_generator ( https://www.tensorflow.org/apl_docs/python/tf/keras/model#fit_generator ) au lieu de model.fit Si votre entrée est un générateur.

Vérifiez également quelles réponses antérieures mentionnées


0 commentaires

0
votes

Je pense que vous avez tort dans

  1. Conversion Liste de la matrice numpie en une seule matrice numpue, vous pouvez utiliser

    data = np.stack (données, axe = 0) / 255

    ou

    data = np.concaténate (données, axe = 0) # Il retournera la forme (bain_size, dim_height * dim_width, canal) puis remodeler les données

    data.leshape (baignoire, dim_height, dim_width, canal)

    ou

    data = np.vstack (données) /255.0

    une autre réponse < / p>

  2. après avoir utilisé lb.fit_transform (étiquettes), vous n'avez pas besoin d'utiliser to_Catégorical (étiquettes)

  3. Ce n'est pas clair que voulez-vous, multi-étiquettes ou multi-classe? c'est différent. Si vous souhaitez passer à un boîtier multi-étiquettes, le binaire_crossentropy est l'une des solutions. Mais vous allez confondre la précision (valeur par défaut) en tant que métrique, il est faux dans Multi-L'étiquette, vous pouvez utiliser le calcul de précision pour la classification multi-étiquettes. Et n'utilisez pas Softmax dans la sortie d'activation finale, veuillez utiliser Sigmoid. Ou si sa classe multiplication change la perte à Catégorical_crossentropy si son étiquette est un codage à chaud, ou à SParse_Categorical_crossentroptropie si son étiquette n'est pas un codage à chaud.

  4. Si sa classification d'image binaire précédente, le modèle de sortie doit être de 1 (1 ou 0) non pas 2

    J'espère que cette réponse devient votre solution


0 commentaires