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 über
tensorflow.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
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
(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
layers.Dense(512, activation="relu", input_shape=(784,)),
layers.Dense(10, activation="softmax")
])
Modellstrukturanalyse
Beispiel
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
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
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
print(f"Testgenauigkeit: {test_acc:.4f}")
Vollständiges Codebeispiel
Beispiel
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
2. Einen fortgeschritteneren Optimierer verwenden: Wie zum Beispiel Adam
Beispiel
3. Verborgene Schichten hinzufügen: Ein tieferes Netzwerk aufbauen
Beispiel
4. Faltungsschichten verwenden: Effektiver für Bilddaten
Beispiel
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
model.save("mnist_model.h5")
# Modell laden
loaded_model = keras.models.load_model("mnist_model.h5")