web-dev-qa-db-fra.com

Avec Keras, comment puis-je entrer un X_train d’images (plus de mille images)?

Mon application concerne les systèmes de voiture évitant les accidents utilisant le Machine Learning (réseaux de neurones de convolution). Mes images sont des images 200x100 JPG et le résultat est un tableau de 4 éléments: la voiture bougerait à gauche, à droite, s’arrêterait ou avancerait. Ainsi, la sortie laissera un élément être 1 (en fonction de l'action correcte à prendre) et les 3 autres éléments seront 0.

Je veux former ma machine maintenant afin de l'aider à saisir n'importe quelle image et à décider de l'action de manière indépendante. Voici mon code:

from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers import Convolution2D, MaxPooling2D
from keras.optimizers import SGD

import numpy as np

model = Sequential()

model.add(Convolution2D(16, 1, 1, border_mode='valid', dim_ordering='tf', input_shape=(200, 150, 1)))
model.add(Activation('relu'))
model.add(Convolution2D(16, 1, 1))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25)) #Cannot take float values

model.add(Convolution2D(32, 1, 1, border_mode='valid'))
model.add(Activation('relu'))
model.add(Convolution2D(32, 1, 1))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Flatten())
# Note: Keras does automatic shape inference.
model.add(Dense(256))
model.add(Activation('relu'))
model.add(Dropout(0.5))

model.add(Dense(10))
model.add(Activation('softmax'))

model.fit(X_train, Y_train, batch_size=32, nb_Epoch=1)

Comment puis-je entrer mes images (je les ai sur mon PC)? Et comment puis-je spécifier le Y-train?

5
Zahra Sorour

Cet article de blog Keras, Construire de puissants modèles de classification des images en utilisant très peu de données , est un excellent tutoriel pour la formation d'un modèle sur des images stockées dans des répertoires. Il introduit également la classe ImageDataGenerator, qui a la fonction membre flow_from_directory référencée dans la réponse de @ isaac-moore. flow from directory peut être utilisé pour former des images, où la structure de répertoire est utilisée pour déduire la valeur de Y_train.

Les trois scripts Python qui accompagnent la publication du blog du tutoriel sont disponibles aux liens ci-dessous:

  1. classifier_from_little_data_script_1.py
  2. classifier_from_little_data_script_2.py
  3. classifier_from_little_data_script_3.py

(Bien sûr, ces liens sont dans la publication de blog elle-même, mais ils ne sont pas situés de manière centrale.) Notez que les scripts 2 et 3 s'appuient sur la sortie de la précédente. Notez également que des fichiers supplémentaires devront être téléchargés à partir de Kaggle et Github .

9
dhinckley

Créez un dossier pour train et dans le dossier, créez des dossiers distincts pour les classes d'images.

Accéder aux images en utilisant 

  train_generator = train_datagen.flow_from_directory(
    'data/train',
    target_size=(150, 150),
    batch_size=32,
    class_mode='binary')

En référence à keras.io

2
isaac-moore

Dans ce référentiel, vous avez un exemple:

https://github.com/ZFTurbo/KAGGLE_DISTRACTED_DRIVER/blob/master/run_keras_simple.py

Ils ont des dossiers différents, dans chaque dossier il y a une classe d'image différente. Ils chargent les images en utilisant opencv et construisent un tableau contenant la classe de chaque image.

0
Rob