Tengo esta red neuronal simple:
import numpy as np
class NeuralNetwork:
def __init__(self):
self.W1 = np.random.randn(2, 3)
self.W2 = np.random.randn(3, 1)
def sigmoid(self, x):
return 1 / (1 + np.exp(-x))
def sigmoid_deriv(self, x):
return x * (1 - x)
def mse(self, O, P):
x = (P - O) ** 2
x = np.mean(x)
y = P - O
return (x, y)
def forward(self, I):
self.Z1 = I @ self.W1
self.A1 = self.sigmoid(self.Z1)
self.Z2 = self.A1 @ self.W2
self.A2 = self.sigmoid(self.Z2)
return self.A2
def backward(self, P, I, O):
error = self.A2 - P
D = [error * self.sigmoid_deriv(self.A2)]
delta = np.random.randn(2, 3)
D.append(delta)
self.W2 = self.W2 + (-0.01 * self.A2.T.dot(D[0]))
self.W1 = self.W1 + (-0.01 * self.A1.T.dot(D[1]))
def train(self, I, P):
O = self.forward(I)
self.backward(P, I, O)
if __name__ == '__main__':
NN = NeuralNetwork()
I = np.array([[0, 1]])
P = np.array([[1]])
for i in range(1):
NN.train(I, P)
exit()
Cuando quiero calcular delta de W1, obtengo un error de dimensiones.
¿Que estoy haciendo mal?
Gracias de antemano por cualquier ayuda.