Ошибка с уклоном в обратном распространении

Это мой нн.

и вот код:

import numpy as np


def relu(x):

    x = np.where(x>=0,x,x*.1)
    return x

def deriv_relu(x):
    x = np.where(x>=0,1,x*.1)
    return x

def bias(x):
    e = np.ones((x.shape[0],1))
    e1 = np.hstack((e,x))
    return e1

X = np.array([[1,1],[1,0],[0,0]]) #3,2

y = np.array([[1,1,0]]).T #3,1

w0 = np.random.random((2,5)) #2,5
w1 = np.random.random((6,1)) #6,1

for i in range(4):
    l0 = X #3,2


    h1 = relu(l0.dot(w0)) #3,5
    h1_bias = bias(h1) #3,6

    l1 = relu(h1_bias.dot(w1)) #3,1

    error = y-l1 #3,1
    delta2 = error*deriv_relu(l1) #3,1

    error2 = delta2.dot(w1.T) #3,6


    delta = error2*deriv_relu(h1_bias)#3,6


    w1+=h1_bias.T.dot(delta2) #6,1
    w0+=l0.T.dot(delta) # w0 is shape 2,5, because of added bias i am dead. Any help?


for a,b in zip(l1,y):
    print(a,b)

Проблема, с которой я сталкиваюсь, заключается в том, что я добавил нейрон смещения в скрытом слое 1. Когда я начинаю с обратного распространения и умножения матриц, я сталкиваюсь с проблемой, потому что размеры, конечно, не выровнены, что, конечно, является дополнительным смещением. Я думаю, как преодолеть эту проблему. Есть ли способ, которым я мог бы сделать это в моем коде?

0 ответов

Другие вопросы по тегам