Meine Anwendung sind Unfallvermeidungssysteme mit Machine Learning (Convolutional Neural Networks). Meine Bilder sind 200 x 100 JPG-Bilder und die Ausgabe ist ein Array von 4 Elementen: Das Auto würde sich nach links, rechts, anhalten oder vorwärts bewegen. Die Ausgabe lässt also ein Element 1
sein (entsprechend der korrekten Aktion, die ausgeführt werden sollte), und die 3 anderen Elemente werden 0
sein.
Ich möchte mein Gerät jetzt trainieren, um es dabei zu unterstützen, ein beliebiges Bild einzugeben und selbstständig über die Aktion zu entscheiden. Hier ist mein 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)
Wie kann ich meine Bilder eingeben (ich habe sie auf meinem PC)? Und wie kann ich den Y-Zug angeben?
Dieser Keras-Blogbeitrag: Erstellen leistungsfähiger Bildklassifizierungsmodelle mit sehr wenig Daten , ist ein hervorragendes Tutorial, um ein Modell anhand von in Verzeichnissen gespeicherten Bildern zu trainieren. Außerdem wird die Klasse ImageDataGenerator
eingeführt, auf die die Memberfunktion flow_from_directory
in der Antwort von @ isaac-moore verweist. flow from directory
kann für das Trainieren von Bildern verwendet werden, wobei die Verzeichnisstruktur verwendet wird, um den Wert von Y_train
abzuleiten.
Die drei Python-Skripts, die den Tutorial-Blogeintrag begleiten, finden Sie unter den folgenden Links:
(Diese Links befinden sich natürlich im Blog-Post selbst, die Links sind jedoch nicht zentral angeordnet.) Beachten Sie, dass die Skripts 2 und 3 auf der Ausgabe der vorherigen basieren. Beachten Sie auch, dass zusätzliche Dateien von Kaggle und Github heruntergeladen werden müssen.
Erstellen Sie einen Ordner für den Zug und erstellen Sie im Ordner separate Ordner für die Bildklassen.
Greifen Sie mit auf die Bilder zu
train_generator = train_datagen.flow_from_directory(
'data/train',
target_size=(150, 150),
batch_size=32,
class_mode='binary')
In Bezug auf keras.io
In diesem Repository haben Sie ein Beispiel:
https://github.com/ZFTurbo/KAGGLE_DISTRACTED_DRIVER/blob/master/run_keras_simple.py
Sie haben unterschiedliche Ordner, in jedem Ordner gibt es eine andere Bildklasse. Sie laden die Bilder mit opencv und bilden ein Array, das die Klasse jedes Bildes enthält.