imports
import numpy as np
np.random.seed(42)
import tensorflow as tf
tf.random.set_seed(42)
from tensorflow import keras
from sklearn.model_selection import train_test_split
from keras.layers import Activation #Import Modul für die Aktivierungsfunktion
from keras.layers import Dense #Anzahl der Dichte der "Neuronen"
from keras.models import Sequential #Modul zum Erzeugen des Neuronalen Netzes
from keras.optimizers import SGD #Import Modul Stochastic Gradient Decent
from keras.utils import to_categorical #Converts a class vector to binary class matrix.Daten laden
dataset = load_digits()
x = dataset.data
y = dataset.target
y_cat=to_categorical(y,num_classes=10) #denke optional
x_train, x_test, y_train, y_test = train_test_split(x, y_cat, test_size=0.30)Daten normalisieren
Normalisieren des Datasets
Man reduziert den Wertebereich behält dabei aber die Abstände (Relation/Korrelation) zwischen den Punkten bei. Alle Daten, die das Modell ab da verwendet müssen normalisiert sein (Training, Test, Prediction)
Die
y-Daten dürfen nicht normalisiert werden!Es gibt 2 Arten von Scalern:
Min Max Scaler
- Wenn die Daten nicht als Normalverteilung vorliegen
- Neuronale Netze funktionieren mit Min Max Scaler besser
from sklearn.preprocessing import MinMaxScaler from sklearn.model_selection import train_test_split scaler = MinMaxScaler() scaler.fit(x) x_transformed = scaler.transform(x) x_train, x_test, y_train, y_test = train_test_split(x_transformed, y, test_size=0.3)Standard Scaler
- Ziel dass die Werte einen Mittelwert von 0 und eine Standardabweichung von 1 haben
- Wenn die Daten normalverteilt sind oder einer Gaußschen Verteilung folgen Wobei der Mittelwert und die Standardabweichung ist.
Link to original from sklearn.preprocessing import StandardScaler scaler=StandardScaler() scaler.fit(x) x_transformed=scaler.transform(x) x_train, x_test, y_train, y_test = train_test_split(x_transformed, y, test_size=0.3)
Neuronales Netz bauen
from keras import layers
from tensorflow.keras.layers import Activation
from tensorflow.keras.layers import Dense
from tensorflow.keras.models import Sequential
from tensorflow.keras.optimizers import SGD
model = Sequential()
model.add(layers.Input(shape=(x.shape[1],),name='Eingabeschicht'))
model.add(Dense(units=450,name='Erste_verdeckte_Schicht')) #Neuronen
model.add(Activation("relu",name='Aktivierungsfunktion_Schicht1')) #Aktivierungsfunktion
model.add(Dense(units=450,name='Zweite_verdeckte_Schicht'))
model.add(Activation("relu",name='Aktivierungsfunktion_Schicht2'))
model.add(Dense(units=3,name='Ausgabeschicht'))
model.add(Activation("softmax",name='Aktivierungsfunktion_der_Ausgabeschicht'))Modell anzeigen lassen
model.summary()Model: “sequential”
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ ┃ Layer (type) ┃ Output Shape ┃ Param # ┃ ┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ Hidden_Layer1 (Dense) │ (None, 512) │ 33,280 │ ├─────────────────────────────────┼────────────────────────┼───────────────┤ │ Aktivierungsfunktion_Hidden_La… │ (None, 512) │ 0 │ │ (Activation) │ │ │ ├─────────────────────────────────┼────────────────────────┼───────────────┤ │ Hidden_Layer2 (Dense) │ (None, 256) │ 131,328 │ ├─────────────────────────────────┼────────────────────────┼───────────────┤ │ Aktivierungsfunktion_Hidden_La… │ (None, 256) │ 0 │ │ (Activation) │ │ │ ├─────────────────────────────────┼────────────────────────┼───────────────┤ │ Hidden_Layer3 (Dense) │ (None, 128) │ 32,896 │ ├─────────────────────────────────┼────────────────────────┼───────────────┤ │ Aktivierungsfunktion_Hidden_La… │ (None, 128) │ 0 │ │ (Activation) │ │ │ ├─────────────────────────────────┼────────────────────────┼───────────────┤ │ dense (Dense) │ (None, 10) │ 1,290 │ ├─────────────────────────────────┼────────────────────────┼───────────────┤ │ activation (Activation) │ (None, 10) │ 0 │ └─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 198,794 (776.54 KB) Trainable params: 198,794 (776.54 KB) Non-trainable params: 0 (0.00 B)
Model kompilieren
- eine Fehlerfunktion: hier
categorical_crossentropy - eine Optimierung: hier
SDG - und eine an zu wendende Metrik: hier
accuracy
model.compile(
loss="categorical_crossentropy", optimizer=SGD(), metrics=["accuracy"]
)Model trainieren
model.fit(x=x_train, y=y_train, epochs=30, validation_data=(x_test,y_test))Speichern und Laden
import keras
model.save("NeuronalesNetz.kaeras")
loaded_model = keras.models.load_model("NeuronalesNetz.kaeras")Weitere Schichten
Convolutional Neural Networks (CNNs)
- Conv1D, Conv2D, Conv3D: Faltungsschichten für 1D, 2D oder 3D Daten
- SeperableConv2D: Effizientere Variante der 2D-Faltung
- DepthwiseConv2D: Faltung über räumliche Dimensionen
- Conv2DTranspose: Transponierte Faltung (für Upsampling)
import keras
model.add(keras.layers.Conv2D(filters=32, kernel_size=(3,33)))Pooling Layers
- MaxPooling1D, MaxPooling2D, MaxPooling3D: Maximales pooling
- AveragePooling1D, AveragePooling2D, AveragePooling3D: Durchschnittliches Pooling
- GlobalMaxPooling2D, GlobalAveragePooling2D: Globales Pooling über gesamte Feature Maps.
import keras
model.add(keras.layers.MaxPooling2D(pool_size=(22, 2)))Recurrent Layers
- Simple RNN: Einfache rekurrente Schicht
- LSTM: Long Short-Term Memory
- GRU: Gated Recurrent Unit
- Bidirectional: Wrapper für bidirektionale RNNs
- ConvLSTM2D: Kombination aus CNN und LSTM
import keras
model.add(keras.layers.LSTM(128))Normalization Layers
- Batch Normalization: Normalisiert Aktivierungen über Batch
- Layer Normalization: Normalisiert über Features
- Group Normalization: Normalisiert Gruppen von Kanälen
- Unit Normalization: Normalisiert auf Einheitslänge
import keras
model.add(keras.layers.Normalization(axis=-1, mean=None, variance=None, invert=False))Regularization Layers
- Dropout: Zufälliges Deaktivieren von Neuronen
- SpatialDropout1D/2D/3D: Dropout ganzer Feature-Maps
- GaussianDropout: Dropout mit Gaußschem Rauschen
- GaussianNoise: Fügt Gaußsches Rauschen hinzu
- AlphaDropout: Spezielles Dropout für SELU-Aktivierung
import keras
model.add(keras.layers.Dropout(rate=0.25))Reshaping Layers
- Flatten: Flacht mehrdimensionale Eingaben ab
- Reshape: Ändert die Form der Daten
- Permute: Vertauscht Dimensionen
- RepeatVector: Wiederholt Eingabe n-mal
- Cropping1D/2D/3D: Schneidet Dimensionen zu
- UpSampling1D/2D/3D: Vergrößert räumliche Dimensionen
- ZeroPadding1D/2D/3D: Fügt Nullen hinzu
import keras
model.add(keras.layers.Flatten())Merging Layers
- Concatenate: Verbindet Tensoren entlang einer Achse
- Add: Addiert mehrere Tensoren
- Subtract: Subtrahiert Tensoren
- Multiply: Multipliziert Tensoren elementweise
- Average: Berechnet Durchschnitt mehrerer Tensoren
- Maximum/Minimum: Elementweises Maximum/Minimum
- Dot: Skalarprodukt
import keras
tf_keras.layers.Concatenate(axis=-1)Embedding Layers
- Embedding: Wandelt Integer-Indizes in dichte Vektoren um
- TextVectorization: Vektorisiert Text (Preprocessing)
import keras
model.add(keras.layers.Embedding(input_dim=1000, output_dim=64))