1. Dichte (vollständig verbundene) Netzwerke
Dichte Netzwerke, auch vollständig verbundene Netzwerke genannt, sind die grundlegendste Art von neuronalen Netzwerken. Jede Neuronen in einer Schicht ist mit jedem Neuronen in der nächsten Schicht verbunden. Diese Netzwerke eignen sich gut für einfache Klassifikations- und Regressionsaufgaben.
Beispiel:
from keras.models import Sequential
from keras.layers import Dense
# Erstellen eines dichten Netzwerks
model = Sequential()
model.add(Dense(64, input_dim=100, activation='relu'))
model.add(Dense(32, activation='relu'))
model.add(Dense(10, activation='softmax'))
# Kompilieren des Modells
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
# Ausgabe der Modellzusammenfassung
print(model.summary())
Ausgabe:
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense (Dense) (None, 64) 6464
_________________________________________________________________
dense_1 (Dense) (None, 32) 2080
_________________________________________________________________
dense_2 (Dense) (None, 10) 330
=================================================================
Total params: 8,874
Trainable params: 8,874
Non-trainable params: 0
_________________________________________________________________
In diesem Beispiel erstellen wir ein einfaches dichtes Netzwerk mit drei Schichten. Die erste Schicht hat 64 Neuronen, die zweite 32 und die Ausgabeschicht 10, wobei Softmax als Aktivierungsfunktion verwendet wird.
2. Convolutional Neural Networks (CNNs)
CNNs sind speziell für die Verarbeitung von Bilddaten entwickelt worden. Sie verwenden Faltungsoperationen, um Merkmale aus den Eingabebildern zu extrahieren. CNNs bestehen in der Regel aus Faltungsschichten (Conv2D), Pooling-Schichten (MaxPooling2D) und vollständig verbundenen Schichten (Dense).
Beispiel:
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
# Erstellen eines CNN
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(10, activation='softmax'))
# Kompilieren des Modells
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
# Ausgabe der Modellzusammenfassung
print(model.summary())
Ausgabe:
Model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d (Conv2D) (None, 26, 26, 32) 320
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 13, 13, 32) 0
_________________________________________________________________
flatten (Flatten) (None, 5408) 0
_________________________________________________________________
dense (Dense) (None, 128) 692352
_________________________________________________________________
dense_1 (Dense) (None, 10) 1290
=================================================================
Total params: 693,962
Trainable params: 693,962
Non-trainable params: 0
_________________________________________________________________
In diesem Beispiel erstellen wir ein CNN, das eine Faltungsschicht mit 32 Filtern, eine Max-Pooling-Schicht, eine Flatten-Schicht und zwei vollständig verbundene Schichten umfasst.
3. Recurrent Neural Networks (RNNs)
RNNs sind darauf ausgelegt, Sequenzdaten zu verarbeiten. Sie haben Rückkopplungsverbindungen, die es ermöglichen, Informationen über frühere Eingaben zu behalten. Dies macht sie besonders nützlich für Aufgaben wie Sprachverarbeitung und Zeitreihenanalyse.
Beispiel:
from keras.models import Sequential
from keras.layers import SimpleRNN, Dense
# Erstellen eines RNN
model = Sequential()
model.add(SimpleRNN(50, input_shape=(100, 1), activation='relu'))
model.add(Dense(1, activation='sigmoid'))
# Kompilieren des Modells
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# Ausgabe der Modellzusammenfassung
print(model.summary())
Ausgabe:
Model: "sequential_2"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
simple_rnn (SimpleRNN) (None, 50) 2600
_________________________________________________________________
dense (Dense) (None, 1) 51
=================================================================
Total params: 2,651
Trainable params: 2,651
Non-trainable params: 0
_________________________________________________________________
In diesem Beispiel erstellen wir ein einfaches RNN mit einer RNN-Schicht und einer Ausgabeschicht.
4. Long Short-Term Memory (LSTM) Netzwerke
LSTM-Netzwerke sind eine spezielle Art von RNNs, die entwickelt wurden, um das Problem des vanishing gradient zu lösen. Sie können sich über längere Zeiträume an Informationen erinnern und sind daher besonders nützlich für Aufgaben wie maschinelles Übersetzen und Textgenerierung.
Beispiel:
from keras.models import Sequential
from keras.layers import LSTM, Dense
# Erstellen eines LSTM-Netzwerks
model = Sequential()
model.add(LSTM(50, input_shape=(100, 1), activation='relu'))
model.add(Dense(1, activation='sigmoid'))
# Kompilieren des Modells
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# Ausgabe der Modellzusammenfassung
print(model.summary())
Auagabe:
Model: "sequential_3"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
lstm (LSTM) (None, 50) 10400
_________________________________________________________________
dense (Dense) (None, 1) 51
=================================================================
Total params: 10,451
Trainable params: 10,451
Non-trainable params: 0
_________________________________________________________________
In diesem Beispiel erstellen wir ein LSTM-Netzwerk mit einer LSTM-Schicht und einer Ausgabeschicht.
5. GRU (Gated Recurrent Units) Netzwerke
GRU-Netzwerke sind eine einfachere Alternative zu LSTMs, die ebenfalls dazu entwickelt wurden, das Problem des vanishing gradient zu lösen. GRUs haben weniger Parameter und können in einigen Fällen schneller trainiert werden.
Beispiel:
from keras.models import Sequential
from keras.layers import GRU, Dense
# Erstellen eines GRU-Netzwerks
model = Sequential()
model.add(GRU(50, input_shape=(100, 1), activation='relu'))
model.add(Dense(1, activation='sigmoid'))
# Kompilieren des Modells
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# Ausgabe der Modellzusammenfassung
print(model.summary())
Ausgabe:
Model: "sequential_4"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
gru (GRU) (None, 50) 7950
_________________________________________________________________
dense (Dense) (None, 1) 51
=================================================================
Total params: 8,001
Trainable params: 8,001
Non-trainable params: 0
_________________________________________________________________
In diesem Beispiel erstellen wir ein GRU-Netzwerk mit einer GRU-Schicht und einer Ausgabeschicht.
Diese detaillierten Erklärungen und Beispiele sollten Ihnen helfen, verschiedene Arten von neuronalen Netzwerken in Keras zu verstehen und zu erstellen.