Beim Deep Learning unterscheidet sich das Implementierungsverfahren je nach verwendetem Backend. Daher lernen Sie, wie man es benutzt, indem Sie die offiziellen Dokumente lesen und auf die Nachschlagewerke verweisen, die es erklären. In diesem Artikel wird der Ablauf der Verwendung erläutert.
Erstellen Sie eine neue virtuelle Umgebung auf Anaconda und installieren Sie Tensorflow und Keras. Von nun an wird es in der erstellten Umgebung ausgeführt. Gehen Sie an der Anaconda-Eingabeaufforderung wie folgt vor:
conda create -n keras_env python=3.6 #Erstellen einer virtuellen Umgebung
conda activate keras_env #Schaltumgebung
conda install tensorflow==1.12.0
conda isntall keras==2.2.4
from keras.datasets import imdb
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)
Alle Eingabe- und Zielwerte für das neuronale Netzwerk müssen ** Tensoren von Gleitkommadaten sein. ** Unabhängig davon, welche Daten Sie verarbeiten müssen, z. B. Audio, Bilder, Text, müssen Sie diese zuerst in Tensoren konvertieren. Verwenden Sie *** One-Hot-Codierung ***, um das Klassifizierungsetikett zu vektorisieren.
from keras.utils.np_utils import to_categorical
one_hot_train_labels = to_categorical(train_labels)
one_hot_test_labels = to_categorical(test_labels)
Die Bilddaten werden als Ganzzahl codiert, die einen Graustufenwert im Bereich von 0 bis 255 darstellt. Um diese Daten an das neuronale Netzwerk zu liefern, wandeln Sie sie mit dem Typ float32 um und teilen Sie sie durch 255, um sie in einen Gleitkommawert im Bereich von 0 bis 1 umzuwandeln. Die Bereitstellung von Funktionen mit unterschiedlichen Reichweiten für das Netzwerk ist um jeden Preis ein Problem. Daher wird eine Normalisierung durchgeführt, um den Bereich gleich zu machen. Der Vorgang des Subtrahierens des Durchschnittswerts des Merkmalsbetrags und des Dividierens durch die Standardabweichung wird durchgeführt. Dann wird der Mittelpunkt der Merkmalsgröße 0 und die Standardabweichung 1.
Stellen Sie die Aktivierungsfunktion und die Anzahl der Neuronen für jede Schicht ein. Sie können sie mit add ()
in der Reihenfolge hinzufügen, in der Sie sie weitergeben möchten.
from keras import models
from keras import layers
model = models.Sequential()
model.add(layers.Dense(16, activation='relu', input_shape=(10000,)))
model.add(layers.Dense(16, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))
model.add(Dense(200))
model.add(Activation("relu"))
** Wählen Sie Optimierer und Verlustfunktion. ** In den folgenden Fällen wird es als Zeichenfolge angegeben. Dies ist jedoch möglich, da es als Teil von Keras gepackt ist.
model.compile(optimizer='rmsprop',#Zeichenspezifikation
loss='binary_crossentropy',
metrics=['accuracy'])
** Wenn Sie das Parameterargument des Optimierers angeben möchten **, geben Sie die Instanz der Optimiererklasse an und rufen Sie die Methode wie folgt auf.
from keras import optimizers
model.compile(optimizer=optimizers.RMSprop(lr=0.001),#Methodenspezifikation
loss='binary_crossentropy',
metrics=['accuracy'])
** Wenn Sie Ihre eigene Verlustfunktion oder Indexfunktion verwenden möchten **, geben Sie ein Funktionsobjekt als Argument für den Verlustparameter oder den Metrikparameter an.
from keras import losses
from keras import metrics
model.compile(optimizer=optimizers.RMSprop(lr=0.001),
loss=losses.binary_crossentropy,
metrics=[metrics.binary_accuracy])
Um die Genauigkeitsrate beim Training eines Modells mit völlig neuen Daten zu überwachen, erstellen Sie einen Validierungsdatensatz mit einem Beispielsatz, der vom ursprünglichen Trainingsdatensatz abweicht. Im Folgenden beim Herausnehmen von 10000 Proben.
x_val = x_train[:10000] #Extraktion von Verifizierungsdaten
partial_x_train = x_train[10000:] #
y_val = y_train[:10000] #Extraktion der korrekten Antwortüberprüfungsdaten
partial_y_train = y_train[10000:]
Wenn die Anzahl der Daten gering ist, sind die Überprüfungsdaten recht klein. Infolgedessen kann die Validierungsbewertung erheblich variieren, je nachdem, welche Datenpunkte für die Validierung und das Training ausgewählt wurden. Das heißt, abhängig von der Methode zum Teilen des Verifizierungsdatensatzes wird die Streuung der Verifizierungsbewertung hoch, was zu einem Überlernen führt. Der beste Weg, dies zu verhindern, ist die Überprüfung der geteilten Kreuzung. Ich werde es nicht im Detail erklären, also schau es dir bitte an.
Trainiere 20 Epochen in 8 Mini-Batches. In vielen Fällen sind x Trainingsdaten und y korrekte Antwortdaten. Überwachen Sie den Verlustwert und die korrekte Antwortrate für die 10000 beiseite gestellten Proben. Validierungsdaten werden als Argument an den Parameter validation_data übergeben.
history = model.fit(partial_x_train,
partial_y_train,
epochs=20,
batch_size=8,
validation_data=(x_val, y_val))
Die Anpassungsmethode gibt die für jede Epoche trainierte Ausgabe und die Ausgabe von Verifizierungsdaten in einem Wörterbuchformat zurück. Dieses Mal wird es im Objekt "history" gespeichert. Wenn Sie den folgenden Code ausführen
history_dict = history.history
history_dict.keys()
dict_keys(['val_acc', 'acc', 'val_loss', 'loss']) Wird sein.
Zeichnen Sie den Verlustwert mit matplotlib. Da das Training im Objekt "Verlauf" aufgezeichnet ist, rufen Sie es von hier aus auf. Passen Sie die Hyperparameter basierend auf diesem Ergebnis an.
import matplotlib.pyplot as plt
acc = history.history['acc']
val_acc = history.history['val_acc']
loss = history.history['loss']
val_loss = history.history['val_loss']
epochs = range(1, len(acc) + 1)
# "bo" is for "blue dot"
plt.plot(epochs, loss, 'bo', label='Training loss')
# b is for "solid blue line"
plt.plot(epochs, val_loss, 'b', label='Validation loss')
plt.title('Training and validation loss')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()
plt.show()
Erstellen Sie einen Ordner zum Speichern des Trainingsbilds (Zug) und einen Ordner zum Speichern des Validierungsbilds (Validierung) und kopieren und sortieren Sie die gesammelten Bilder zur Verwendung beim Lernen. Die Anzahl der Bilder in den Überprüfungsdaten wird durch die Anzahl der Bilder bestimmt. Es wird jedoch empfohlen, sie auf etwa 20% bis 40% der Gesamtzahl der Bilder anzupassen. Geben Sie den Pfad des hier erstellten Ordners im Ordnerpfad von "flow_from_directory ()" an, der im späteren Vorverarbeitungsprozess angezeigt wird.
from keras import layers
from keras import models
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(Dense(2))
model.add(Activation("softmax"))
Die Form des Eingangstensors von CNN ist (Bildhöhe, Bildbreite, Bildkanäle). Das dritte Argument ist die Anzahl der Bildkanäle. Bei RGB-Bildern beträgt die Anzahl der Kanäle 3.
Conv2D (Ausgabetiefe, Filtergröße)
Wenn das Argument padding = 'same'
angegeben ist, werden Breite und Höhe der Ausgabe so aufgefüllt, dass sie mit der Eingabe übereinstimmen.
Übrigens können Sie das von model.summary ()
erstellte Modell überprüfen.
Bei der Bildklassifizierung ist die letzte Ebene "dicht" (vollständig verbundene Ebene), und die Anzahl der zu klassifizierenden Klassen wird im Argument angegeben. Da die Ausgabe die Wahrscheinlichkeit der Beurteilung ist, wählen Sie softmax als Verlustfunktion.
Verlustfunktion und Optimierungseinstellungen.
from keras import optimizers
model.compile(loss='binary_crossentropy',
optimizer=optimizers.RMSprop(lr=1e-4),
metrics=['acc'])
Bevor die Daten an das CNN geliefert werden können, müssen sie ordnungsgemäß als Gleitkomma-Tensor verarbeitet werden. Das Verfahren ist wie folgt:
Laden Sie Bilder aus einem Verzeichnis mit ImageDataGenerator
from keras.preprocessing.image import ImageDataGenerator
# All images will be rescaled by 1./255
train_datagen = ImageDataGenerator(rescale=1./255)
test_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
# This is the target directory
train_dir,
# All images will be resized to 150x150
target_size=(150, 150),
batch_size=20,
# Since we use binary_crossentropy loss, we need binary labels
class_mode='binary')
validation_generator = test_datagen.flow_from_directory(
validation_dir,
target_size=(150, 150),
batch_size=20,
class_mode='binary')
Verwenden Sie die Funktion fit_generator ()
, um das Modell zu trainieren.
step_per_epoch
ist die Anzahl der Schritte, die in einer Epoche ausgeführt werden sollen. validation_steps
gibt an, wie viele Bilder in einer Epoche validiert werden.
history = model.fit_generator(
train_generator,
steps_per_epoch=10,
epochs=30,
validation_data=validation_generator,
validation_steps=5)
Verwenden Sie die Funktion save ()
, um die Parameter des trainierten Netzwerks zu speichern. In Keras wird es als Datei mit der Erweiterung ".h5" gespeichert. Wenn Sie die h5-Datei aufrufen, können Sie das Bild mit diesem Parameter ab dem nächsten Mal vorhersagen.
model.save('cats_and_dogs_small_1.h5')
import matplotlib.pyplot as plt
acc = history.history['acc']
val_acc = history.history['val_acc']
loss = history.history['loss']
val_loss = history.history['val_loss']
epochs = range(len(acc))
plt.plot(epochs, acc, 'bo', label='Training acc')
plt.plot(epochs, val_acc, 'b', label='Validation acc')
plt.title('Training and validation accuracy')
plt.legend()
plt.figure()
plt.plot(epochs, loss, 'bo', label='Training loss')
plt.plot(epochs, val_loss, 'b', label='Validation loss')
plt.title('Training and validation loss')
plt.legend()
plt.show()
Ändern Sie einfach den Teil, der auf "model = models.Sequential ()" gesetzt wurde, wie folgt. Geben Sie den Pfad der gespeicherten Netzwerkdatei im Argument "load_model" an. Da das trainierte Netzwerk verwendet wird, ist das zum Zeitpunkt des Lernens verwendete System add () nicht erforderlich. Das trainierte Modell wird so wie es ist geladen.
model=keras.models.load_model('cats_and_dogs_small_1.h5')
https://qiita.com/GushiSnow/items/8c946208de0d6a4e31e7#%E5%85%B7%E4%BD%93%E7%9A%84%E3%81%AA%E5%AE%9F%E8%A3%85%E4%BE%8B https://qiita.com/tsunaki/items/608ff3cd941d82cd656b https://qiita.com/tomo_20180402/items/e8c55bdca648f4877188 https://ymgsapo.com/2019/02/28/keras-dog-and-cat/
Recommended Posts