2017-08-31 3 views
0

J'utilise un ImageDataGenerator pour augmenter mes images. J'ai besoin d'obtenir les étiquettes y du générateur.Keras Image Data Generator voir les étiquettes

Exemple: J'ai 10 images de formation, 7 sont l'étiquette 0 et 3 sont l'étiquette 1. Je veux augmenter la taille du jeu de formation à 100.

total_training_images = 100 total_val_images = 50

model.fit_generator(
    train_generator, 
    steps_per_epoch= total_training_images // batch_size, 
    epochs=epochs, 
    validation_data=validation_generator, 
    validation_steps= total_val_images // batch_size) 

D'après ce que je comprends, cela forme un modèle sur 100 images de formation pour chaque époque, chaque image étant augmentée d'une manière ou d'une autre selon mon générateur de données, puis valide sur 50 images. Si je fais train_generator.classes, j'obtiens une sortie [0,0,0,0,0,0,0,1,1,1]. Cela correspond à mes 7 images de l'étiquette 0 et 3 images de l'étiquette 1.

Pour ces 100 nouvelles images, comment puis-je obtenir les étiquettes y? Est-ce que cela signifie que lorsque j'ajoute 100 images, mes nouvelles étiquettes train_generator sont la même chose, mais répétées 10 fois? Essentiellement np.append(train_generator.classes) 10 fois?

Je suis suivant ce tutoriel, si cela aide: https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html

+0

En théorie oui, mais si l'augmentation cache la partie de l'image qui devait rendre cette étiquette, je ne sais pas comment procéder .... –

+0

est juste flips augmentation et remise à l'échelle des couleurs. Que voulez-vous dire en cachant une partie de l'image? Je veux obtenir les étiquettes pour mon ensemble d'entraînement après l'augmentation. L'ensemble de test est bon. Si je sauvegarde les fichiers image, j'obtiens de nouveaux noms de fichiers qui n'ont rien à voir avec mes anciens noms de fichiers. –

+0

Une partie de l'image serait manquante si le générateur effectuait des rotations et des redimensionnements, mais il semble que ce ne soit pas le cas. –

Répondre

0

Sur la base de ce que vous dites au sujet du générateur, oui.

Il va répliquer la même étiquette pour chaque image augmentée. (Sinon, le modèle ne s'entraînerait pas correctement).

Une façon simple de vérifier ce que le générateur est la sortie est d'obtenir ce qu'il donne:

X,Y = train_generator.next() #or next(train_generator) 

Rappelez-vous simplement que cela placera le générateur dans une position pour obtenir le deuxième élément, pas la première plus. (Cela ferait commencer la méthode d'ajustement à partir du second élément).

0

Les étiquettes génèrent un codage à chaud unique avec les images. Espérons que cela aide!

training_set.class_indices 

from keras.preprocessing import image 
import matplotlib.pyplot as plt 

x,y = train_generator.next() 
for i in range(0,3): 
    image = x[i] 
    label = y[i] 
    print (label) 
    plt.imshow(image) 
    plt.show()