Keras Erstes neuronales Netzwerk

Keras ist eine in Python geschriebene High-Level-API für neuronale Netze, die auf TensorFlow, CNTK oder Theano ausgeführt werden kann. Seine Entwicklung konzentriert sich auf die Unterstützung schneller Experimente und ermöglicht mit minimalem Code einen schnellen Übergang von der Idee zum Ergebnis.

Hauptmerkmale von Keras

  • Benutzerfreundlich: Keras bietet eine einfache und konsistente Schnittstelle
  • Modular: Die verschiedenen Komponenten eines neuronalen Netzes (Schichten, Optimierer, Initialisierungsschemata usw.) sind zusammensetzbare Module
  • Einfache Erweiterbarkeit: Neue Module können einfach hinzugefügt werden, um neue Forschungsideen auszudrücken
  • Multi-Backend-Unterstützung: Kann nahtlos zwischen TensorFlow, Theano und CNTK als Rechen-Backend wechseln

Keras installieren

Bevor wir beginnen, müssen wir Keras und seine Backend-Engine installieren (hier verwenden wir TensorFlow):

pip install tensorflow keras

Hinweis: Keras 2.4.0 und spätere Versionen wurden in TensorFlow integriert und können direkt übertensorflow.kerasVerwenden Sie


Das erste neuronale Netz aufbauen

Beginnen wir mit einem einfachen vollständig verbundenen neuronalen Netz, um das klassische MNIST-Problem der handschriftlichen Ziffernerkennung zu lösen.

1. Die notwendigen Bibliotheken importieren

Beispiel

import numpy as np
from tensorflow import keras
from tensorflow.keras import layers

2. Daten vorbereiten

Der MNIST-Datensatz enthält 60,000 Trainingsbilder und 10,000 Testbilder, bei denen es sich jeweils um ein 28x28-Pixel-Graustufenbild einer handgeschriebenen Ziffer handelt.

Beispiel

# Daten laden
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()

# Daten vorverarbeiten
x_train = x_train.reshape(60000, 784).astype("float32") / 255
x_test = x_test.reshape(10000, 784).astype("float32") / 255

# Labels in One-Hot-Codierung umwandeln
y_train = keras.utils.to_categorical(y_train, 10)
y_test = keras.utils.to_categorical(y_test, 10)

3. Das Modell erstellen

Wir werden ein einfaches vollständig verbundenes Netzwerk erstellen, das eine Eingabeschicht, eine verborgene Schicht und eine Ausgabeschicht enthält.

Beispiel

model = keras.Sequential([
    layers.Dense(512, activation="relu", input_shape=(784,)),
    layers.Dense(10, activation="softmax")
])

Modellstrukturanalyse

Beispiel

graph TD
A[Eingabeschicht 784 Neuronen] --> B[Verborgene Schicht 512 Neuronen, ReLU-Aktivierung]
B --> C[Ausgabeschicht 10 Neuronen, Softmax-Aktivierung]

4. Modell kompilieren

Bevor wir das Modell trainieren, müssen wir den Lernprozess konfigurieren:

Beispiel

model.compile(
    optimizer="rmsprop",
    loss="categorical_crossentropy",
    metrics=["accuracy"]
)

Beschreibung der Compile-Parameter

Parameter Beschreibung Häufige Werte
optimizer Optimierer, wird zum Aktualisieren der Gewichte verwendet "rmsprop", "adam", "sgd"
loss Verlustfunktion, misst die Differenz zwischen Modellvorhersagen und wahren Werten "categorical_crossentropy" (Klassifikation), "mse" (Regression)
metrics Evaluierungsmetrik, wird zur Überwachung des Trainings verwendet ["accuracy"]

5. Das Modell trainieren

Jetzt können wir mit dem Training des Modells beginnen:

Beispiel

history = model.fit(
    x_train, y_train,
    batch_size=128,
    epochs=10,
    validation_split=0.2
)

Beschreibung der Trainingsparameter

Parameter Beschreibung Empfohlene Werte
batch_size Anzahl der Samples, die pro Gradientenaktualisierung verwendet werden 32-256
epochs Anzahl der Trainingsepochen Anpassen je nach Datenkomplexität
validation_split Anteil der Trainingsdaten, der als Validierungssatz verwendet wird 0.1-0.3

6. Das Modell evaluieren

Nach Abschluss des Trainings können wir die Modellleistung auf dem Testset bewerten:

Beispiel

test_loss, test_acc = model.evaluate(x_test, y_test)
print(f"Testgenauigkeit: {test_acc:.4f}")

Vollständiges Codebeispiel

Beispiel

import numpy as np
from tensorflow import keras
from tensorflow.keras import layers

# 1. Daten laden
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()

# 2. Vorverarbeitung
x_train = x_train.reshape(60000, 784).astype("float32") / 255
x_test = x_test.reshape(10000, 784).astype("float32") / 255
y_train = keras.utils.to_categorical(y_train, 10)
y_test = keras.utils.to_categorical(y_test, 10)

# 3. Modell erstellen
model = keras.Sequential([
    layers.Dense(512, activation="relu", input_shape=(784,)),
    layers.Dense(10, activation="softmax")
])

# 4. Das Modell kompilieren
model.compile(
    optimizer="rmsprop",
    loss="categorical_crossentropy",
    metrics=["accuracy"]
)

# 5. Das Modell trainieren
history = model.fit(
    x_train, y_train,
    batch_size=128,
    epochs=10,
    validation_split=0.2
)

# 6. Das Modell evaluieren
test_loss, test_acc = model.evaluate(x_test, y_test)
print(f"Testgenauigkeit: {test_acc:.4f}")

Vorschläge zur Modellverbesserung

1. Eine Dropout-Schicht hinzufügen: Überanpassung verhindern

Beispiel

model.add(layers.Dropout(0.5))

2. Einen fortgeschritteneren Optimierer verwenden: Wie zum Beispiel Adam

Beispiel

model.compile(optimizer="adam", ...)

3. Verborgene Schichten hinzufügen: Ein tieferes Netzwerk aufbauen

Beispiel

model.add(layers.Dense(256, activation="relu"))

4. Faltungsschichten verwenden: Effektiver für Bilddaten

Beispiel

model.add(layers.Conv2D(32, (3, 3), activation="relu"))

FAQ

Q1: Warum ist die Genauigkeit meines Modells so niedrig?

  • Prüfen Sie, ob die Datenvorverarbeitung korrekt ist
  • Versuchen Sie, die Lernrate anzupassen
  • Netzwerkkapazität erhöhen (mehr Schichten oder mehr Neuronen)

Q2: Was soll ich tun, wenn der Verlust während des Trainings nicht abnimmt?

  • Prüfen Sie, ob es Probleme mit den Daten gibt
  • Probieren Sie verschiedene Optimierer aus
  • Lernrate anpassen (normalerweise reduzieren)

Q3: Wie speichert und lädt man ein trainiertes Modell?

Beispiel

# Modell speichern
model.save("mnist_model.h5")

# Modell laden
loaded_model = keras.models.load_model("mnist_model.h5")
Weitere Erweiterungen