Ich erstelle einen einfachen NN von Grund auf neu, der MNIST-Ziffern klassifizieren kann. Es hat nur 1 versteckte Schicht:-< /p>
Laden der Daten: < /p>
import numpy as np
import matplotlib.pyplot as plt
from keras.datasets import mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255, x_test / 255
< /code>
Umgestaltung von Daten aus (Beispiel, Breite (28), Höhe (28)) in (Beispiel, Merkmale (784)) < /p>
x_train, x_test = x_train.reshape(len(x_train), 28 * 28), x_test.reshape(len(x_test), 28 * 28)
< /code>
Erstellen Sie zufällig Gewichte und Verzerrungen: < /p>
W1 = np.random.randn(784, 10)
b1 = np.random.randn(10)
W2 = np.random.randn(10, 10)
b2 = np.random.randn(10)
< /code>
Modell Setup: < /p>
def relu(x):
return np.maximum(x, 0)
def softmax(x):
e_x = np.exp(x - np.max(x))
return e_x / e_x.sum(axis=0, keepdims = True)
def predict(x):
Z1 = x.dot(W1) + b1
A1 = relu(Z1)
Z2 = A1.dot(W2) + b2
A2 = softmax(Z2)
return A2
< /code>
Vorhersagen mit dem Modell: < /p>
output = predict(x_train)
print(output[0])
print(sum(output[0]))
< /code>
Ausgabe: < /p>
# 1st prediction:
[6.44150328e-36 1.67195064e-26 1.39217822e-21 5.56347561e-33
6.82907898e-37 1.14102025e-15 1.84167684e-33 3.95638149e-40
8.13076930e-28 3.55477799e-17]
# I'm pretty sure this isn't equal to 1:
1.1765694206173507e-15
< /code>
Softmax gibt diese seltsamen Zahlen immer wieder aus, anstatt mir tatsächlich Vorhersagen zwischen 0,0 und 1,0 zu geben, die bis zu 1,0 addieren. Ich habe versucht, Kleifer auf False zu setzen und die Achse auf 1 zu wechseln oder sie auf keine zu setzen, und ich habe auch versucht, die offiziellen Keras zu verwenden. Alle SoftMax-Funktionen mit meinen eigenen Zufallszahlen, die es aus irgendeinem Grund funktioniert, zum Beispiel Softmax ([-1, 2, 3]) oder Softmax ([[-1], [2], [3]) würden perfekt funktionieren.>
Softmax -Funktionen geben immer Müllnummern aus, die sich nicht zu einem summieren ⇐ Python
-
- Similar Topics
- Replies
- Views
- Last post
Mobile version