Я застрял на обратном распространении второго скрытого слоя. Это мой код:
def sigmoid(self, x):
return 1/(1+np.exp(-x))
def sigmoid_der(self, x):
return self.sigmoid(x) *(1-self.sigmoid(x))
def __init__(self):
self.inputsize = 1
self.hiddenlayorsize1 = 6
self.hiddenlayorsize2 = 6
self.outputlayoursize = 1
self.W1 = np.random.randn(self.inputsize, self.hiddenlayorsize1)
self.W2 = np.random.randn(self.hiddenlayorsize1, self.hiddenlayorsize2)
self.w3 = np.random.randn(self.hiddenlayorsize2, self.outputlayoursize)
def feedforward(self, X):
self.z = np.dot(X, self.W1)
self.z2 = self.sigmoid(self.z)
self.z3 = np.dot(self.z2, self.W2)
self.z4 = self.sigmoid(self.z3)
self.z5 = np.dot(self.z4, self.w3)
output = self.sigmoid(self.z5)
return output
def backward(self, X, y, output):
self.output_error = y - output
self.output_delta = self.output_error * self.sigmoid_der(output)
print(self.output_error.sum())
self.z2_error = X.T.dot(self.W2.T)
self.z2_delta = self.z2_error * self.sigmoid_der(self.z2)
# Here we need to add the error for the second hidden layer
# self.z4_error = ...
def train(self, X, y):
output = self.feedforward(X)
self.backward(X, y, output)
Знаете ли вы, как рассчитать ошибку для второго скрытого слоя, и если да, можете ли вы добавить какое-нибудь объяснение? Спасибо!