imports
import numpy as np
np.random.seed(42)
import tensorflow as tf
tf.random.set_seed(42) #Auch in Tensorflow können wir einen Beginn
#für die Zufallszahlen festlegen
from tensorflow import keras
from sklearn.datasets import load_digits #Import Dataset
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
print(y)
y_cat=to_categorical(y,num_classes=10)
print(y)
x_train, x_test, y_train, y_test = train_test_split(x, y_cat, test_size=0.30)Neuronales Netz bauen
from keras.layers import Input
model=Sequential()
model.add(Input(shape=(x.shape[1],))) #Eingabeschicht
model.add(Dense(units=512, name='Hidden_Layer1'))
model.add(Activation("relu", name='Aktivierungsfunktion_Hidden_Layer1'))
model.add(Dense(units=256, name='Hidden_Layer2'))
model.add(Activation("relu", name='Aktivierungsfunktion_Hidden_Layer2'))
model.add(Dense(units=128, name='Hidden_Layer3'))
model.add(Activation("relu", name='Aktivierungsfunktion_Hidden_Layer3'))
model.add(Dense(units=10)) #Ausgabeschicht
model.add(Activation("softmax"))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 compilieren
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))