Hallo zusammen,
ich versuche gerade zu lernen, wie ich neuronale Netze trainieren kann.
Ich habe mit zwei Varianten gestartet, die ich eigentlich als sehr einfach gehalten hätte.
Zum einen wollte ich einem neuronalen Netz ein UND-Gatter beibringen.
Mein Code sieht so aus:
Theoretisch funktioniert das auch so. Die Ausgabe am schluss sieht so aus:
[[0.04564238]
[0.2500483 ]
[0.24398649]
[0.69230145]]
Wenn ich jetzt sagen würde, alles was kleiner ist als 0,5 entspricht einem False und alles was größer ist entspricht einem True, dann wäre das richtig. Aber irgendwie hätte ich gedacht, dass ich durch "activation='sigmoid'" erreiche, dass entweder 0 oder 1 ausgegeben wird.
Was mach ich hier falsch?
Und dann hab ich noch versucht einem neuronalen Netz beizubringen, zwei Eingabewerte zu Multiplizieren. Dafür habe ich im vergleich zum obigen Beispiel noch einen Hidden-Layer hinzugefügt (weil das ja ein klein wenig komplexer ist)
Der Code sieht so aus:
Aber ich habe es absolut nicht geschafft, dass mein LOSS runter geht. Ich habe auch mit verschieden vielen Hidden Layern experimentiert, ich habe verschieden viele Epochen verwendet, ich habe verschiedene Aktivierungsfunktionen verwendet und ich habe es mit dem adam-Optimizer versucht.
Das Ergebnis war immer mehr oder weniger das gleiche: Ein sehr hoher Loss und eine Ausgabe die weit von dem entfernt war, was ich wollte.
Was mach ich falsch?
ich versuche gerade zu lernen, wie ich neuronale Netze trainieren kann.
Ich habe mit zwei Varianten gestartet, die ich eigentlich als sehr einfach gehalten hätte.
Zum einen wollte ich einem neuronalen Netz ein UND-Gatter beibringen.
Mein Code sieht so aus:
Code:
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers import SGD
# Daten erzeugen
training_data = np.array([[0,0],[0,1],[1,0],[1,1]], "float32")
target_data = np.array([[0],[0],[0],[1]], "float32")
# Modell erzeugen
model = Sequential()
model.add(Dense(1, input_dim=2, activation='sigmoid'))
# Modell kompilieren
sgd = SGD(lr=0.1)
model.compile(loss='mean_squared_error', optimizer=sgd)
# Modell trainieren
model.fit(training_data, target_data, epochs=1000)
# Modell testen
print(model.predict(training_data))
Theoretisch funktioniert das auch so. Die Ausgabe am schluss sieht so aus:
[[0.04564238]
[0.2500483 ]
[0.24398649]
[0.69230145]]
Wenn ich jetzt sagen würde, alles was kleiner ist als 0,5 entspricht einem False und alles was größer ist entspricht einem True, dann wäre das richtig. Aber irgendwie hätte ich gedacht, dass ich durch "activation='sigmoid'" erreiche, dass entweder 0 oder 1 ausgegeben wird.
Was mach ich hier falsch?
Und dann hab ich noch versucht einem neuronalen Netz beizubringen, zwei Eingabewerte zu Multiplizieren. Dafür habe ich im vergleich zum obigen Beispiel noch einen Hidden-Layer hinzugefügt (weil das ja ein klein wenig komplexer ist)
Der Code sieht so aus:
Code:
import tensorflow as tf
import numpy as np
# Generate toy data
inputs = np.array([[1, 1], [2, 2], [3, 3], [4, 4], [1, 4], [1, 2], [1, 3], [1, 0], [2, 3], [3, 4], [6, 5], [9, 8], [10, 12], [0, 5], [100, 2], [2, 100], [5, 5], [2, 50], [8, 3], [3, 7], [2, 9], [8, 5], [11, 2], [2, 11], [3, 19], [25, 7], [7, 33], [4999, 5], [48, 5111], [2, 15], [3, 5626], [56, 5], [5, 44], [3, 12], [4, 13], [4, 16], [4, 20], [4, 0], [0, 55555], [1, 55], [2, 555], [2, 5555], [3, 455], [4, 1564], [9, 455], [100, 9], [100, 0], [5, 2], [151, 12], [4544, 2], [1, 4], [4, 2], [55, 2], [6, 7], [7, 8], [25, 5], [66, 666], [712, 2], [4, 7], [8, 9], [7, 9], [6, 7], [6, 5], [5, 9]])
outputs = np.array([[1], [4], [9], [16], [4], [2], [3], [0], [6], [12], [30], [72], [120], [0], [200], [200], [25], [100], [24], [21], [18], [40], [22], [22], [57], [175], [231], [24995], [245328], [30], [16878], [280], [220], [36], [52], [64], [80], [0], [0], [55], [1110], [11110], [1365], [6256], [4095], [900], [0], [10], [1812], [9088], [4], [8], [110], [42], [56], [125], [43956], [1424], [28], [72], [63], [42], [30], [45]])
# Modelldefinition
model = tf.keras.models.Sequential([
tf.keras.layers.Dense(1, input_shape=(2,), activation="relu"),
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dense(1, activation='relu'),
])
# Kompilierung des Modells
model.compile(optimizer='sgd', loss='mean_squared_error', metrics=['accuracy'])
# Trainieren des Modells
model.fit(inputs, outputs, epochs=500)
# Test model
print(model.predict(np.array([[3, 3]])))
Aber ich habe es absolut nicht geschafft, dass mein LOSS runter geht. Ich habe auch mit verschieden vielen Hidden Layern experimentiert, ich habe verschieden viele Epochen verwendet, ich habe verschiedene Aktivierungsfunktionen verwendet und ich habe es mit dem adam-Optimizer versucht.
Das Ergebnis war immer mehr oder weniger das gleiche: Ein sehr hoher Loss und eine Ausgabe die weit von dem entfernt war, was ich wollte.
Was mach ich falsch?