Neural Netzwerk XOR-Tor nicht lernen

Ich versuche, ein XOR-Gatter mit einem 2-Perzeptron-Netzwerk zu erstellen, aber aus irgendeinem Grund lernt das Netzwerk nicht. Wenn ich die Fehleränderung in einem Diagramm zeichne, erreicht der Fehler ein statisches Niveau und oszilliert in dieser Region.

Ich habe dem Netzwerk im Moment keine Verzerrung hinzugefügt.

import numpy as np

def S(x):
    return 1/(1+np.exp(-x))

win = np.random.randn(2,2)
wout = np.random.randn(2,1)
eta = 0.15

# win = [[1,1], [2,2]]
# wout = [[1],[2]]

obj = [[0,0],[1,0],[0,1],[1,1]]
target = [0,1,1,0]

epoch = int(10000)
emajor = ""

for r in range(0,epoch):
    for xy in range(len(target)):
        tar = target[xy]
        fdata = obj[xy]

        fdata = S(np.dot(1,fdata))

        hnw = np.dot(fdata,win)

        hnw = S(np.dot(fdata,win))

        out = np.dot(hnw,wout)

        out = S(out)

        diff = tar-out

        E = 0.5 * np.power(diff,2)
        emajor += str(E[0]) + ",\n"

        delta_out = (out-tar)*(out*(1-out))
        nindelta_out = delta_out * eta

        wout_change = np.dot(nindelta_out[0], hnw)

        for x in range(len(wout_change)):
            change = wout_change[x]
            wout[x] -= change

        delta_in = np.dot(hnw,(1-hnw)) * np.dot(delta_out[0], wout)
        nindelta_in = eta * delta_in

        for x in range(len(nindelta_in)):
            midway = np.dot(nindelta_in[x][0], fdata)
            for y in range(len(win)):
                win[y][x] -= midway[y]



f = open('xor.csv','w')
f.write(emajor) # python will convert \n to os.linesep
f.close() # you can omit in most cases as the destructor will call it

Dies ist der Fehler, der sich durch die Anzahl der Lernrunden ändert. Ist das richtig? Die rote Linie ist die Linie, mit der ich gerechnet habe, wie sich der Fehler ändern sollte.

Ich mache irgendwas falsch im Code? Wie ich nicht scheinen kann, herauszufinden, was den Fehler verursacht. Hilfe sehr geschätzt.

Danke im Vorau

Antworten auf die Frage(4)

Ihre Antwort auf die Frage